Назад | Перейти на главную страницу

.pgpass с postgreSQL не работает

Я поместил файл .pgpass в /folder/.pgpass, и он выглядит так

*:*:*:postgres:password_for_postgres

У меня есть сценарий bash, в котором я создаю резервную копию базы данных из postgreSQL:

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

Однако сценарий по-прежнему предлагает мне ввести пароль. PGPASSFILE имеет такое значение, насколько я могу судить. Есть какие-нибудь намеки на то, в чем может быть проблема?

/ К

Установлен ли для файла pgpass режим 0600 (т.е. чтение / запись только владельцем)? Клиентская библиотека проигнорирует его, если он доступен для чтения для группы или для всех.

На моей конфигурации (Ubuntu 10.04.3 и PostgreSQL 8.4), Наконец-то я смог заставить его работать, когда имя пользователя, в которое я вошел, совпадает с тем, которое я пытаюсь получить пароль от .pgpass файл для.

Вы вошли как deployer, Я пытался использовать .pgpass файл для доступа к базе данных, принадлежащей имени пользователя appname, который не имеет пользовательского эквивалента в Unix. Я не мог сделать .pgpass работать, пока я не начал использовать deployer как пользователь для доступа к моей базе данных ...

Вот мой /home/deployer/.pgpass содержимое файла:

*:*:*:deployer:password

Здесь часть /etc/postgresql/8.4/main/pg_hba.conf один:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
host    all         all         127.0.0.1/32          md5                                                   
host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
host    all         all         ::1/128               md5 

Как видите, все мои подключения требуют пароля (md5).

В этой конфигурации, если у меня есть база данных, которую я создал с помощью этой команды:

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

Я могу выполнить следующую операцию без ввода пароля:

deployer@ubuntu-server:~$ dropdb dbname

Как только я поменяю имя своего .pgpass к .pgpass-no, потребуется пароль.

Кстати, не забывайте, что ваш .pgpass файл должен находиться под 0600 разрешения:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass

Еще нужно проверить, что вы не использовали -W флаг с psql, потому что это всегда приведет к принудительному вводу пароля вместо проверки вашего .pgpass

  1. Создайте файл .pgpass с содержимым

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

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

sudo chmod 600 .pgpass

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

sudo chown имя_пользователя: имя_пользователя .pgpass

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

экспорт PGPASSFILE = '/ home / user / .pgpass'

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

psql -h host -U someuser somedb

Я не буду запрашивать пароль и авторизуюсь в postgresql.