У меня только что установленная машина CentOS 6.8. Я установил его с опцией сервера базы данных, поэтому postgresql 8.4 был установлен. После установки запустил:
[root@test-ekaterina ~]# service postgresql start
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
[FAIL]
[root@test-ekaterina ~]# service postgresql initdb
[.initialization message not in english..] [ OK ]
[root@test-ekaterina ~]# service postgresql start
[.initialization message not in english..]: [ OK ]
[root@test-ekaterina ~]# ps -ef | grep postgres
postgres 10835 1 22 17:07 ? 00:00:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres 10839 10835 0 17:07 ? 00:00:00 postgres: logger process
postgres 10841 10835 0 17:07 ? 00:00:00 postgres: writer process
postgres 10842 10835 0 17:07 ? 00:00:00 postgres: wal writer process
postgres 10843 10835 0 17:07 ? 00:00:00 postgres: autovacuum launcher process
postgres 10844 10835 0 17:07 ? 00:00:00 postgres: stats collector process
root 10846 10687 0 17:07 pts/0 00:00:00 grep postgres
[root@test-ekaterina ~]# psql -U postgres
psql: FATAL: Ident authentication failed for user «postgres»
[root@test-ekaterina ~]# psql -U postgres postgres
psql: FATAL: Ident authentication failed for user «postgres»
[root@test-ekaterina ~]# psql -U postgres -h localhost postgres
psql: FATAL: Ident authentication failed for user «postgres»
[root@test-ekaterina pg_log]# psql
psql: FATAL: Ident authentication failed for user «root»
[root@test-ekaterina pg_log]# sudo -u postgres psql
postgres=#
Файл конфигурации pg_hba.conf
сразу после установки имеет:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
В первой строке, в которой говорится local all all ident
Я бы ожидал psql -U postgres
чтобы подключиться к локальной базе данных postgres, потому что [Документация PG] говорит:
пользователь Указывает, каким именам пользователей базы данных соответствует эта запись. Значение все указывает, что он соответствует всем пользователям.
Вместо этого возникает ошибка аутентификации. Но бег psql
команда с sudo, как пользователь postgres CentOS, работает нормально. Это заставляет меня думать, что PostgreSQL каким-то образом использует * nix user plus psql -U
пользователь для аутентификации доступа. Почему это? Что мне не хватает? Конечно, если я изменю pg_hba.conf
файл и замените первую строку на local all all trust
работает отлично. Но я хочу понять, почему я должен олицетворять выполнение psql, если файл psql принадлежит пользователю root:
[root@test-ekaterina pg_log]# ls -l /usr/bin/psql
-rwxr-xr-x. 1 root root 342984 oct 5 2017 /usr/bin/psql