Хм ...
Если вы можете подключиться с помощью имени пользователя и пароля в 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
Если вышеперечисленное работает, ваш сервер, вероятно, настроен на использование одноранговой аутентификации для локальных соединений пользователем postgres , то есть запрашивает у ОС имя пользователя, чтобы подтвердить, что вы 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!