Я хочу использовать psql для выполнения ./my_test.sql(который находится в моих локальных окнах) в Linux pg.
Я использую --dbname
для подключения к базе данных, но мой пароль('z987xSst@@gres') содержит ключевое слово "@", что приводит к такой ошибке:
psql --dbname=postgresql://postgres:z987xSst@@gres@ip:5432/postgres -A -t -q -f ./my_test.sql
-- psql: error: Unable to interpret host name "@gres@ip" to address: Unknown server error
Я пытался использовать для этого обратную косую черту (z987xSst\@\@gres
), но это не сработало.
Я хочу знать, что мне нужно сделать, чтобы это заработало, и есть ли другой способ. (Желательно, чтобы мне не приходилось вводить пароль вручную, например --dbname
ул.)
Почему вы помещаете свой пароль в строку подключения? Используйте .pgpass или что-нибудь другое, что безопасно. См. postgresql.org/docs/current/libpq-pgpass.html
@Марк Спасибо за ответ. Я знаю опцию --password
, она должна ввести пароль позже, но я не хочу.
@FrankHeikens Спасибо за ваш ответ. На самом деле я делаю это раньше. Но я использую .pgpass только в Linux, а не в Windows. Когда я создаю файл в C:\Users\Administrator\.pgpass
, он не работает. Я думаю, что это, возможно, не будет использоваться в Windows. После вашего ответа я еще раз прочитал документ. Проблема со стилем: встроенный код находится в конце абзаца. См. <github.com/postgres/postgres/blob/master/doc/src/sgml/…>. И этот конфиг %APPDATA%\postgresql\pgpass.conf
эффективен.
Насколько мне известно, .pgpass также работает в Windows. Я уже давно не прикасался к машине с Windows, но раньше она работала нормально.
Вы должны закодировать специальные символы, чтобы @
стало %40
Это работает, большое спасибо.
Вы пробовали взять это в кавычки? Что делать, если вы используете опцию
--password
и URL-адрес/строку подключения без пароля. напримерpsql --dbname = "postgresql://<username>@<ip>..." --password
. Не указывайте пароль, подождите, psql его запросит.