Postgresql 9.3 на Centos 7 с пользовательскими PGDATA

Я пытаюсь настроить сервер Postgresql 9.3 на Centos 7 (Установка через yum) внутри пользовательского каталога, который в моем случае является зашифрованным разделом (/custom_container/database), который монтируется при запуске. По какой-то причине Postgresql не ведет себя так, как должно в инструкции и делает ошибку при запуске сервиса.

Примечание: он не хочет принимать переменную среды PGDATA, которую я установил, и при запуске

su - postgres -c '/usr/pgsql-9.3/bin/initdb'

(учитывая, что PGDATA каталог принадлежит postgres: postgres) кластер инициализируется внутри каталога по умолчанию /var / lib/pgsql / 9.3 / data/ Единственный способ изменить это-использовать

su - postgres -c '/usr/pgsql-9.3/bin/initdb --pgdata=$PGDATA'

который инициализирует каталог внутри пользовательского контейнера, который я использую. Это то, что я не мог понять, так как документы говорят, что переменная PGDATA берется по умолчанию.

проблема: при запуске

service postgresql-9.3 start

Я получаю ошибку с журналом

postgresql-9.3.service - PostgreSQL 9.3 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.3.service; disabled)
Active: failed (Result: exit-code) since Mon 2014-11-10 15:24:15 CET; 1s ago
Process: 2785 ExecStartPre=/usr/pgsql-9.3/bin/postgresql93-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Starting PostgreSQL 9.3 database server...
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: "/var/lib/pgsql/9.3/data/" is missing or empty.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: Use "/usr/pgsql-9.3/bin/postgresql93-setup initdb" to initialize t...ster.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: See %{_pkgdocdir}/README.rpm-dist for more information.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: postgresql-9.3.service: control process exited, code=exited status=1
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Failed to start PostgreSQL 9.3 database server.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Unit postgresql-9.3.service entered failed state.

что означает этот Postgresql, даже если кластер инициализирован в новом каталоге $PGDATA (/custom_container /database), все еще ищет кластер в/var/lib/pgsql/9.3/data/

кто-нибудь испытывал это поведение Postgresql раньше? Может быть, я забыл некоторые параметры конфигурации или проблема связана с установкой Postgresql?

спасибо заранее!

5 ответов


похоже, реальной проблемой была установка переменных среды, которые я получил, работая в следующем потоке: Centos 7 переменные среды для службы Postgres Проблема заключается в переменной PGDATA, установленной внутри пользовательского /etc/systemd/system / postgresql-9.3.сервис, который должен быть создан из содержимого /usr/lib/systemd/system / postgresql-9.3.служба, которая использует PGDATA var по умолчанию.


попробуйте это:

 ## Login with postgres user
 su - postgres
 export PGDATA=/your_path/data
 pg_ctl -D $PGDATA start &

Я думаю, что самый "CentOS 7 способ" сделать это-скопировать файл службы:

sudo cp /usr/lib/systemd/system/postgresql-9.6.service /etc/systemd/system/postgresql-9.6.service

затем отредактируйте файл / etc/systemd/system / postgresql-9.6.сервис:

# Location of database directory
Environment=PGDATA=/mnt/volume/var/lib/pgsql/9.6/data/

затем запустить его sudo systemctl start postgresql-9.6 и проверить:

# sudo ps -ax | grep postmaster
32100 ?        Ss     0:00 /usr/pgsql-9.6/bin/postmaster -D /mnt/volume/var/lib/pgsql/9.6/data/

вам нужно создать пользовательскую на /etc/systemd/system/, который переопределяет значение по умолчанию PGDATA переменные среды. Ваш пользовательский файл службы может .include файл службы postgresql по умолчанию, поэтому вам нужно только добавить то, что вы хотите изменить. Таким образом, обновления все еще могут изменять/улучшать? материал в файле службы по умолчанию, пока ваше изменение сохраняется.

вот как я это сделал в Centos 7:

cat <<END >/etc/systemd/system/postgresql.service
.include /lib/systemd/system/postgresql.service
[Service]
Environment=PGDATA=/mnt/postgres/data ## <== SET THIS TO YOUR WANTED $PGDATA
END

systemctl daemon-reload

systemctl restart postgresql.service

проверка :

ps -ax | grep [p]ostgres

попробуйте отредактировать файл / etc / init.д/с PostgreSQL-9.3: PGDATA= / ваш / пользовательский / путь