LINUX.ORG.RU
решено ФорумAdmin

Какие права должны быть на data_directory в postgresql?

 


0

1

Есть нужда перенести data_directory в другой раздел, который по-больше. Сделал бэкап базы, удалил /var/lib/postgres/ и попытался создать заново sudo su - postgres -c "initdb --locale ru_RU.UTF-8 -E UTF8 -D '/home/postgres/data'". Ошибка

авг 23 22:28:19 arch postgres[27994]: "/var/lib/postgres/data" is missing or empty. Use a command like
авг 23 22:28:19 arch postgres[27994]:   su - postgres -c "initdb --locale en_US.UTF-8 -D '/var/lib/postgres/data'"
Ладно, пересоздал в /var/lib/. Открыл конфиг, поправил data_directory='/home/postgres'. Затем сменил владельца sudo chown -R postgres:postgres /home/postgres. Перезапускаю сервис, пишет
авг 23 22:33:46 arch systemd[1]: Starting PostgreSQL database server...
авг 23 22:33:47 arch postgres[28806]: СООБЩЕНИЕ:  отсутствующий файл конфигурации "/home/postgres/postgresql.auto.conf" пропускается
авг 23 22:33:47 arch postgres[28806]: ВАЖНО:  не удалось считать права на каталог "/home/postgres": Отказано в доступе
авг 23 22:33:48 arch postgres[28806]: pg_ctl: не удалось запустить сервер

★★★★
Ответ на: комментарий от dnb

Не уверен, что это вообще должно на что-то повлиять, и уж конечно, к выводимым сообщениям не относится, но на всякий случай: если /home/ смонтирован с опцией noexec, то, может, попробовать сделать исполнимым? Глупость, конечно, из области ненаучного тыка, но другие идеи в голову не приходят. УМВР.

aureliano15 ★★
()
Ответ на: комментарий от dnb

не удалось считать права на каталог «/home/postgres»

И ещё я бы попробовал отловить ps'ом во время запуска сервиса (пока он не остановился), от какого пользователя он запускается.

aureliano15 ★★
()

sudo su - postgres -c «initdb --locale ru_RU.UTF-8 -E UTF8 -D '/home/postgres/data'»

И вместо этого звездеца лучше sudo -u postgres initdb --locale ru_RU.UTF-8 -E UTF8 -D '/home/postgres/data'

Deleted
()
Последнее исправление: MyLittleLoli (всего исправлений: 1)
Ответ на: комментарий от Deleted
[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres

Environment=PGROOT=/var/lib/postgres

SyslogIdentifier=postgres
PIDFile=/var/lib/postgres/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755

ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data
ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop=  /usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast

# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200

# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
dnb ★★★★
() автор топика
Ответ на: комментарий от dnb

Изменил Environment=PGROOT=/home/postgres

Но все равно не работает

$ sudo rm -rf /home/postgres/data  
$ sudo su - postgres -c "initdb --locale ru_RU.UTF-8 -E UTF8 -D '/home/postgres/data'"
Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres".
От его имени также будет запускаться процесс сервера.

Кластер баз данных будет инициализирован с локалью "ru_RU.UTF-8".
Выбрана конфигурация текстового поиска по умолчанию "russian".

Контроль целостности страниц данных отключён.

создание каталога /home/postgres/data... ок
создание подкаталогов... ок
выбирается значение max_connections... 100
выбирается значение shared_buffers... 128MB
выбор реализации динамической разделяемой памяти ... posix
создание конфигурационных файлов... ок
выполняется подготовительный скрипт ... ок
выполняется заключительная инициализация ... ок
сохранение данных на диске... ок

ПРЕДУПРЕЖДЕНИЕ: используется проверка подлинности "trust" для локальных подключений.
Другой метод можно выбрать, отредактировав pg_hba.conf или используя ключи -A,
--auth-local или --auth-host при следующем выполнении initdb.

Готово. Теперь вы можете запустить сервер баз данных:

    pg_ctl -D /home/postgres/data -l logfile start

$ sudo systemctl start postgresql.service                                            
Job for postgresql.service failed because the control process exited with error code.
See "systemctl  status postgresql.service" and "journalctl  -xe" for details.
$ sudo systemctl status postgresql.service                                            
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2017-08-24 00:00:45 MSK; 3s ago
  Process: 16374 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=1/FAILURE)
 Main PID: 28470 (code=exited, status=0/SUCCESS)

авг 24 00:00:45 arch systemd[1]: Starting PostgreSQL database server...
авг 24 00:00:45 arch postgres[16374]: "/home/postgres/data" is missing or empty. Use a command like
авг 24 00:00:45 arch postgres[16374]:   su - postgres -c "initdb --locale en_US.UTF-8 -D '/home/postgres/data'"
авг 24 00:00:45 arch postgres[16374]: with relevant options, to initialize the database cluster.
авг 24 00:00:45 arch systemd[1]: postgresql.service: Control process exited, code=exited status=1
авг 24 00:00:45 arch systemd[1]: Failed to start PostgreSQL database server.
авг 24 00:00:45 arch systemd[1]: postgresql.service: Unit entered failed state.
авг 24 00:00:45 arch systemd[1]: postgresql.service: Failed with result 'exit-code'.

dnb ★★★★
() автор топика
Ответ на: комментарий от Deleted

drwxr-xr-x 3 postgres postgres 4096 авг 24 00:00 /home/postgres

dnb ★★★★
() автор топика
Ответ на: комментарий от Deleted

ProtectHome=true

Не заменил сразу, меняй на false, либо создавай свою базу в месте отличном от /home/...

Deleted
()
Ответ на: комментарий от Deleted

Как раз это поправил и все заработало. Огромное спасибо)

dnb ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.