Автор Тема: postgres-12 initdb  (Прочитано 920 раз)

Оффлайн Rik

  • Давно тут
  • **
  • Сообщений: 186
    • Визуальные технологии
postgres-12 initdb
« : 20.04.2021 07:57:50 »
Здравствуйте.
Установил Postgres, после задался вопросом как инициализировать кластер баз данных в другом месте, а не там где предлагает initdb по умолчанию. Баз пока нет.
Создаю папку pg_base в своем каталоге, делаю владельцем папки postgres
Останавливаю сервер: service postresql stop
Пробую снова инициализировать кластер, но в новом месте: /etc/init.d/postgresql initdb -D /home/my/pg_base
А initdb лезет в папку по умолчанию и пишет:
initdb: ошибка: каталог "/var/lib/pgsql/data" существует, но он не пуст
Если вы хотите создать новую систему баз данных,
удалите или очистите каталог "/var/lib/pgsql/data",
либо при запуске initdb в качестве пути укажите не "/var/lib/pgsql/data".
Как путь указать правильно?
visual-t.ru Кросс-платформенные технологии визуальной разработки ПО.

Оффлайн flint1975

  • Завсегдатай
  • *
  • Сообщений: 1 425
    • Email
Re: postgres-12 initdb
« Ответ #1 : 20.04.2021 09:47:19 »
Я не стал ломать голову, просто примонтировал свой путь в /var/lib/pgsql/data в fstab
и инициировал систему по умолчанию

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 161
Re: postgres-12 initdb
« Ответ #2 : 20.04.2021 10:11:23 »
Простые "раскопки" показывают:
Файл /etc/init.d/postgresql
...
PGDATA=/var/lib/pgsql/data
...
initdb()
{
        if [ ! -d "$PGDATA" ]; then
                mkdir -p "$PGDATA"
                chown postgres.postgres "$PGDATA"
        fi

        locale_list="$(su -l postgres -s /bin/sh -c '/usr/bin/locale')"
        locale="$(echo $locale_list | tr ' ' '\n' | grep LANG | cut -d '=' -f2 )"
        echo "Creating default database:"
        su -s /bin/sh -l postgres -c "initdb  --pgdata=\"$PGDATA\" --locale=\"$locale\" "
        RETVAL=$?
        [ "$RETVAL" -ne 0 ] && return $RETVAL
}
...
Т.е. давать пераметр -D для /etc/init.d/postgresql initdb бесполезно, и если хотите разместить базу в другом месте, то проще, как указал выше flint1975, смонтировать через --bind.

Есть ещё одно фиксированное указание на папку /var/lib/pgsql/data - переменная окружения в /var/lib/pgsql/.bash_profile
PGLIB=/usr/share/pgsql
PGDATA=/var/lib/pgsql/data
export PGLIB PGDATA

Кроме этого, есть прямое указание в /etc/systemd/system/multi-user.target.wants/postgresql.service
# Location of database directory
Environment=PGDATA=/var/lib/pgsql/data
и возможно ещё где...
« Последнее редактирование: 20.04.2021 10:17:26 от Александр Ерещенко »

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 041
  • ITS
Re: postgres-12 initdb
« Ответ #3 : 20.04.2021 10:50:37 »
странно, ведь initdb бинарник и врядли в нем путь привязан?
# which initdb
/usr/bin/initdb
я так ставил, но путь не менял, надо будет проверить.

## Делаем под root
# adduser postgres
# mkdir /var/lib/pgsql/data
# chown postgres /var/lib/pgsql/data
# su - postgres -s /bin/bash
# initdb -D /var/lib/pgsql/data

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 161
Re: postgres-12 initdb
« Ответ #4 : 20.04.2021 12:40:35 »
странно, ведь initdb бинарник и врядли в нем путь привязан?
Ну так топикстартер запускал не сам initdb, а скрипт  /etc/init.d/postgresql с параметром "initdb -D /home/my/pg_base"
Вот я и посмотрел, что там в скрипте делается.

Проинициализировать вручную базу в другой папке можно. Но тогда и сервер postgres тоже придется запускать вручную с нужными параметрами. Так что вариант с монтированием своей папки в /var/lib/pgsql/data наиболее простой и совместимый с дальнейшими обновлениями системы и пр.

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 041
  • ITS
Re: postgres-12 initdb
« Ответ #5 : 20.04.2021 12:46:04 »
Проинициализировать вручную базу в другой папке можно. Но тогда и сервер postgres тоже придется запускать вручную с нужными параметрами. Так что вариант с монтированием своей папки в /var/lib/pgsql/data наиболее простой и совместимый с дальнейшими обновлениями системы и пр.
Согласен, просто прояснил некоторые моменты.

Оффлайн Rik

  • Давно тут
  • **
  • Сообщений: 186
    • Визуальные технологии
Re: postgres-12 initdb
« Ответ #6 : 24.04.2021 19:41:59 »
Я примонтировал папку base (/var/lib/pgsql/data/base), postgres запускается, не ругается. Но дальше экспериментировать пока времени не было.
« Последнее редактирование: 24.04.2021 19:45:11 от Rik »
visual-t.ru Кросс-платформенные технологии визуальной разработки ПО.