Хммм ...
Если вы можете подключиться с помощью имени пользователя и пароля в pgAdminIII, но не можете подключиться с помощью psql
, то эти две программы, вероятно, подключаются к базе данных по-разному.
[Если вы подключаетесь к разным базам данных, сначала попробуйте подключиться к одной и той же базе данных. Смотри ниже.]
С PostgreSQL: Документация: 9.3: psql :
Если вы опустите имя хоста, psql подключится через сокет Unix-домена к серверу на локальном хосте или через TCP / IP к localhost на машинах, у которых нет сокетов Unix-домена.
Если вы не используете что-то вроде psql ... -h host_name ...
и используете Ubuntu, psql
должно подключаться через сокет Unix-домена, поэтому PostgreSQL, вероятно, не настроен на использование одного из методов аутентификации по паролю. для пользователя postgres .
Вы можете проверить это, запустив:
sudo -u postgres psql
Если вышеперечисленное работает, ваш сервер, вероятно, настроен на использование peer аутентификации для локальных подключений пользователем postgres , т.е. запрашивает у ОС ваше имя пользователя, чтобы подтвердить, что вы ' re postgres .
Так что, вероятно, ваш pg_hba.conf Файл
Полный путь к файлу будет примерно таким , как / etc / postgresql / 9.3 / main / pg_hba.conf . Вы можете просмотреть его, например, sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
.
Если вы опускаете имя хоста в своей команде psql
, вы сможете подключиться, если добавите следующую запись в ваш pg_hba.conf файл:
# Connection type Database User IP addresses Method
local all postgres md5
[Комментируемые строки в файле pg_hba.conf начинаются с #
.]
Если вы , включая имя хоста в вашей команде psql
, добавьте эту запись вместо:
# Connection type Database User IP addresses Method
host all postgres 127.0.0.1/32 md5
Вам нужно поставить запись, прежде чем другие записи будут сопоставлены для вашего соединения через psql
. Если вы сомневаетесь в том, куда его поместить, просто поместите его перед первой строкой без комментариев.
Подробнее о pg_hba.conf
От PostgreSQL: Документация: 9.3: Файл pg_hba.conf [жирный акцент мой]:
Первая запись с соответствующим типом подключения , адрес клиента , запрашиваемая база данных и имя пользователя используется для выполнения аутентификации , Не существует "резервных" или "резервных копий": если выбрана одна запись и аутентификация не пройдена, последующие записи не рассматриваются. Если не найдено ни одной записи, доступ запрещен.
Обратите внимание, что записи не соответствуют методу аутентификации. Итак, если ваш pg_hba.conf файл содержит следующую запись:
# Connection type Database User IP addresses Method
local all postgres peer
Тогда вы не сможете подключиться через:
psql -u postgres
Если одна из этих записей не находится в вашем pg_hba.conf файле над прежней записи:
# Connection type Database User IP addresses Method
local all postgres md5
local all postgres password # Unencrypted!
local all all md5
local all all password # Unencrypted!