В postgreSQL /var/lib/pgsql/data/pg_hba.conf
trust
и ident
можно установить как method
например вот так.
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all postgres trust
host all postgres 127.0.0.1/32 trust
У меня создалось впечатление, что разница между ними была в trust
Я как root
может сделать
psql postgres
и с ident
Мне пришлось
sudo -u postgres psql postgres
Однако я не могу заставить работать первую команду даже с trust
.
Вопрос
Может кто-нибудь объяснить, в чем разница trust
и ident
?
psql
должен подключаться к базе данных с именем пользователя базы данных. Когда это не указано в -U
вариант, он принимает имя пользователя ОС в качестве значения по умолчанию.
Так что на самом деле psql dbname
эквивалентно psql -U $USER dbname
В результате, когда вы вошли как root
и вы не создали пользователя базы данных с именем root
, это обычно приводит к следующей ошибке, даже если режим аутентификации trust
.
# psql postgres
psql: FATAL: роль "root" не существует
С другой стороны, он работал бы, если бы он был вызван таким образом, но все еще зарегистрирован как root:
# psql -U postgres postgres
что нормально, потому что база данных с именем postgres
и пользователь с именем postgres
оба существуют, поскольку они создаются автоматически во время установки PostgreSQL.
«Доверие» означает «какое бы имя пользователя ни использовал клиент, вам не нужно запрашивать пароль для проверки пользователя».
«Идентификатор» означает «принять все, что идентификатор возвращает в качестве имени пользователя, не запрашивая пароль для проверки».
Дополнительную информацию о различных методах аутентификации можно найти на сайте сайт postgresql.
Чтобы выяснить, почему это конкретное соединение не удалось, вам нужно проверить журналы postgresql. Возможно, имя пользователя, которое вы используете, не существует в базе данных postgres, или это может быть какая-то другая проблема - это невозможно определить, не посмотрев сначала журналы.