Как заставить перезагрузку pg_ctl работать? Запрашивает пароль пользователя postgres, но не принимает его

#postgresql #postgresql-11

#postgresql #postgresql-11

Вопрос:

Я установил PostgreSQL 11 на виртуальную машину CentOS 7, используя yum в соответствии с инструкциями Postgres на сайте. После установки я сделал

 /usr/pgsql-11/bin/postgresql-11-setup initdb
systemctl enable postgresql-11
systemctl start postgresql-11
  

а затем пошел и настроил postgresql.conf файл.

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

Я попытался sudo pg_ctl reload использовать postgres учетную запись, которая затем запрашивает у меня postgres пароль. Насколько я понимаю, эта учетная запись была создана с инициализацией и не имеет пароля, но простое нажатие enter не принимается.

Затем я попытался изменить пароль, выполнив su -u postgres psql postgres из root и выполнив оболочку, ALTER USER postgres PASSWORD 'myPasswordHere'; которая вернула ALTER ROLE результат в качестве подтверждения. При повторной попытке перезагрузки, как указано выше, новый пароль по-прежнему не принимается.

Затем я попытался выполнить это systemctl restart postgres-11 от имени root, но, похоже, это полностью нарушило работу базы данных, не позволяя мне выполнять какие-либо процессы, связанные с базой данных, или даже получить доступ к оболочке Postgres.

Мне пришлось удалить каталог данных и повторно запустить initdb команду выше, чтобы перезапустить все (и pg_ctl команды по-прежнему не принимают мой пароль).

Как мне правильно перезагрузить базу данных, чтобы мои изменения в postgresql.conf были реализованы?

Комментарии:

1. Если systemctl restart postgres-11 ваша установка «сломалась», то вы, вероятно, внесли в postgresql.conf некоторые неправильные изменения, и теперь Postgres отказывается запускаться. Вы пытались отменить эти изменения, а затем restart службу? Моя рекомендация — не редактировать postgresql.conf напрямую, а добавить custom.conf со всеми изменениями, а затем включить это в конце postgresql.conf — таким образом, вы всегда будете знать, что вы изменили, и вы можете легко отменить, не включая пользовательский конфигурационный файл.

Ответ №1:

Вы запутались на многих уровнях.

  1. Пользователи базы данных отличаются от пользователей операционной системы. Если вы измените postgres пароль в базе данных, у пользователя операционной системы по-прежнему не будет пароля.

    Я не вижу, как это нарушает работу базы данных. Возможно, ваш pg_hba.conf файл неправильно настроен.

  2. Вы запускаетесь pg_ctl reload как пользователь операционной системы postgres , а не как root , потому что postgres вам принадлежат процессы PostgreSQL, поэтому нет необходимости в sudo и, следовательно, нет необходимости в пароле операционной системы.

Вероятно, вам следует прочитать документацию PostgreSQL о аутентификации клиента и управлении пользователями.

Комментарии:

1. Спасибо за разъяснение. Использование sudo перед pg_ctl командой, похоже, является проблемой. Также мне нужно было сделать pg_ctl restart вместо ‘reload’, который сработал. Он выдал строку, в которой говорилось, что в разрешении отказано, не удается перейти в каталог «мой текущий каталог», несмотря на то, что я уточнил каталог данных с -D флагом, но перезагрузка все еще работала.