2014-01-03 2 views
2

Я переместил хранилище данных по умолчанию /var/lib/pgsql/9.3/data на новый диск для повышения производительности. Все идет хорошо, и сервер начинает нормально работать, но он перестает принимать запросы на порт 5432. Я провел некоторое исследование, и до сих пор я понимаю, что в моем Linux-дистрибутиве (CentOS 9.5) вместо /tmp/.s.PGSQL.5432 он настроен на использование другого пути. Я попытался изменить unix_socket_directories, но без успеха. Любые идеи, как это решить?Переместить хранилище данных postgresql (порт останавливает прослушивание)

EDIT

Вот шаги, как я изменил папку

#In /etc/init.d/postgresql-9.3 
PGDATA=/my_new_disc/pgdata/data 
PGLOG=/my_new_disc/pgdata/data/pgstartup.log 

# under root user 
> mkdir /my_new_disc/pgdata/data 
> chmod 775 /my_new_disc/pgdata/data 
> chown postgres/my_new_disc/pgdata/data 

# switch to postgres user 
> su postgres 
> initdb /my_new_disc/pgdata/data 

данных После этого я был в состоянии успешно запустить службу и можно увидеть, что Postgres прослушивает порт 5432, но было возможно подключиться только при входе в систему как пользователь postgres.

Это не работает даже от корневого пользователя на той же машине, когда я пытаюсь

psql -h localhost -U postgres postgres 

Он просит пароль и говорит, что так и не удалось подключиться.

EDIT2:

Другой вариант Я имею в виду, чтобы использовать символические ссылки ... было бы лучше?

+0

Изучите журнал ошибок сервера в каталоге данных PostgreSQL. Есть ли там ошибка? Также: Вы остановили PostgreSQL перед перемещением данных? –

+1

Вы работаете с включенным SELinux? –

+0

@Craig в журнале нет сообщения ... он просто не принимает никакого запроса на порт 5432, и в этот момент база данных была отключена. – Tamerlane

ответ

0

Поскольку вам предлагается ввести пароль, это означает, что база данных прослушивается, но вам нужно настроить свой метод подключения.

Файл конфигурации, который вам нужно просмотреть, находится в /etc/postgresql/9.3/main/pg_hba.conf (для его редактирования вам необходимо быть root).

Вы увидите строки (после комментариев), которые выглядят что-то вроде:

 
local all    postgres        peer 
host all    all    127.0.0.1/32   md5 

линии, которые начинаются с «местным» относятся к соединениям Сокета. Следующая запись относится к базам данных (обычно «все»). Затем идет идентификатор пользователя db, к которому это относится. Для строки «хозяина» вам необходимо указать диапазон IP, к которому это относится.

Ваша проблема связана с последней записью. «peer» означает, что вы должны войти в систему как одноименный пользователь unix. «trust» означает, что база данных не будет запрашивать пароль. И «md5» запросит пароль.

Итак, если вы хотите подключиться к базе данных как «Postgres» пользователь, вы хотите линии, которые выглядят как:

 
local all  postgres  trust 
host  all  postgres  127.0.0.1/32 trust 

Тогда psql -U postgres postgres не будет запрашивать пароль.

Строка конфигурации для пользователя postgres должна появиться перед аналогичной линией для всех пользователей (db будет использовать первое правило, которое соответствует).

Имейте в виду, что с помощью «доверия» любой пользователь может войти в базу данных без предоставления пароля. Возможно, вы захотите установить пароль в базе данных для пользователя postgres, а затем вернуть файл pg_hba.conf в md5.

Смежные вопросы