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

Почему у меня не работает «psql -U»?

Я только начинаю с Postgres.

Это свежая установка Postgres 9.5 на Ubuntu 14.04 LTS. Я использовал подходящее репо из: http://www.postgresql.org/download/linux/ubuntu/

Вступительная страница http://www.postgresql.org/docs/9.5/static/tutorial-createdb.html говорит, что "-U" должно работать. Это не так:

chris@blue:~$ psql -U postgres
psql: FATAL:  Peer authentication failed for user "postgres"

Тем не менее, если я "su" на postgres, все в порядке:

chris@blue:~$ sudo su - postgres
postgres@blue:~$ psql
psql (9.5.2)
Type "help" for help.

postgres=# 

Что я неправильно понял?

Учебник работает только при установке PostgreSQL из исходного кода. В вашей установке Ubuntu контроль доступа уже был настроен, поэтому не все могут войти в систему (отсюда «ошибка аутентификации»). Чтобы следовать руководству, попробуйте войти в postgres пользователь (sudo -u postgres -i), а затем следуйте инструкциям в руководстве.

psql -U - это пытаясь чтобы работать правильно. Однако способ, которым postgresql пытается аутентифицировать вас, терпит неудачу.

Когда вы выполняете sudo для postgres, команда psql берет вашу личность из оболочки sudo'ed. Без «-U» он пытается использовать идентификатор пользователя и ищет его в списке ролей. Он говорит: «Эй, клиент работает под идентификатором пользователя postgres! Мы можем этому доверять! »

В обоих случаях все управляет файлом pg_hba.conf. Он говорит postgresql доверять локальному пользователю с именем postgres. Но в остальном он использует «одноранговую» аутентификацию.

При «одноранговой» аутентификации он ожидает увидеть пользователя базы данных («роль») с вашим именем, а затем аутентифицирует вас как этого пользователя (только!).