@kos21

PostgreSQL: как дождаться ввода пароля при запуске скрипта?

Задача: запросить от пользователя пароль и выполнить нужные команды.
Вот мой батник:
@echo on
"C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -f  D:/script.sql -a
pause

Если я ввожу неверный пароль, то он просто идет дальше по скрипту
608ad6fa71003248597490.png
Как сделать так, чтобы он ждал верного пароля?
  • Вопрос задан
  • 173 просмотра
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
Сначала запросите пароль в переменную, а потом запускайте, передавая пароль из переменной.

@echo off
cls
SET /P psqlpassword="Введите пароль (Enter для завершения): "
if "%psqlpassword%"=="" exit /b
"C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -W %psqlpassword% -f  D:/script.sql -a 
pause


Если пароль введён неверно, будет отображено сообщение об ошибке, и выполнение пойдёт дальше.

Если надо заново запросить пароль, следует использовать проверку на ошибку:

@echo off
:execute_psql
cls
SET /P psqlpassword="Введите пароль (Enter для завершения): "
if "%psqlpassword%"=="" exit /b
"C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -W %psqlpassword% -f  D:/script.sql -a 
if errorlevel 1 goto :execute_psql
pause


Правда, нужно убедиться, что psql.exe её возвращает, что не факт. Также следует убедиться, что он не возвращает ошибки в иных ситуациях, когда повторный запрос пароля и запуск не требуются, или ввести проверку на код ошибки.
Ответ написан
@kos21 Автор вопроса
Этого вполне хватило
@echo off
psqlexe -U postgres  -f  app/script.sql -a 
if errorlevel 1 goto :execute_psql
pause
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
А зачем вы вводите пароль руками, тем более неправильный? Забирайте его из файла pgpass или просто укажите в качестве переменной PGPASSWORD.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы