Подтвердить что ты не робот

Postgresql:.pgpass не работает

Я создал файл .pgpass в моем домашнем каталоге, который выглядит как

localhost:5432:somedb:someuser:somepass

Я использую оболочку script, которая создает каталог и помещает там pg_dump somedb:

mkdir directory
pg_dump somedb > directory/somefile.dump

Он по-прежнему запрашивает пароль.

Где ошибка здесь?

4b9b3361

Ответ 1

Вы пытались указать хост и пользователя?

pg_dump -U someuser -h localhost somedb > directory/somefile.dump

Ответ 2

Несмотря на то, что вопрос уже был дан ответ и принят, также может случиться так, что разрешения на файл .pgpass не установлены должным образом. Он должен запретить доступ к миру и группе:

/bin/chmod 0600 ~/.pgpass

Ответ 3

Проверьте владельца файла .pgpass. Потерял полчаса, чтобы узнать, что я создал свой файл .pgpass с помощью sudo. Команда для моего пользователя и местоположения была chown postgres:postgres/var/lib/pgsql/.pgpass.

Ответ 4

1) Создать файл .pgpass с контентом

хост: 5432: somedb: someuser: somepass

2) установить разрешения с помощью команды

sudo chmod 600.pgpass

3) Установите владельца файла тем же пользователем, с которым вы вошли в систему:

sudo chown login_username: login_username.pgpass

4) Установите переменную окружения PGPASSFILE:

export PGPASSFILE = '/home/user/.pgpass'

Теперь проверьте, подключившись к базе данных:

psql -h host -U someuser somedb

Он не будет запрашивать пароль и войдет в систему postgresql.

Ответ 5

psql (startup.c) вызывает PQconnectdbParams (fe-connect.c), а затем вызывается passwordFromFile. Вот контрольный список, чтобы убедиться, что файл pgpass будет использоваться:

  1. Убедитесь, что флаги --password/-W и password= в строке подключения не установлены. В противном случае файл pgpass не будет использоваться.
  2. Убедитесь, что переменная окружения PGPASSWORD не установлена (echo $PGPASSWORD). В противном случае файл pgpass не будет использоваться.
  3. Убедитесь, что файл pgpass находится в правильном месте ($PGPASSFILE или по умолчанию ~/.pgpass или %APPDATA%\postgresql\pgpass.conf)
  4. Убедитесь, что пароль не доступен для чтения, записи или выполнения группой или другим (например, chmod 600 ~/.pgpass); в противном случае psql выведет предупреждение.
  5. Убедитесь, что пароль является файлом (не символической ссылкой); в противном случае psql выведет предупреждение.
  6. Убедитесь, что пароль доступен для чтения пользователю psql (например, cat ~/.pgpass); иначе psql проигнорирует это без предупреждения. Убедитесь, что он принадлежит пользователю, и что все его каталоги-предки являются исполняемыми пользователем.
  7. Убедитесь, что имя хоста, порт, имя базы данных, имя пользователя строки в файле pgpass соответствуют серверу или *. Сервер pwhost, который проверяется, является именем host если оно не пусто, или IP-адресом hostaddr. В противном случае файл будет проигнорирован без предупреждения.

К сожалению, в этих файлах нет регистрации, поэтому, если это не поможет, вам может понадобиться скомпилировать psql и libpq самостоятельно и запустить их в отладчике.