web-dev-qa-db-ja.com

Centos 7のPostgresql 9.3とカスタムPGDATA

Centos 7でPostgresql 9.3サーバーをセットアップしようとしています(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'

これにより、使用しているカスタムコンテナー内のディレクトリが初期化されます。 PGD​​ATA変数はデフォルトで取得されるとドキュメントが言っているので、これは私が理解できなかったものです。

問題:実行中

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.

つまり、新しい$ PGDATAディレクトリ(/ custom_container/database)でクラスターが初期化されていても、Postgresqlは引き続き/var/lib/pgsql/9.3/data/でクラスターを探します。

誰かが以前にこのPostgresqlの動作を経験しましたか?特定の設定オプションを忘れたか、Postgresqlのインストールに問題があるのでしょうか?

前もって感謝します!

10

実際の問題は、次のスレッドで作業していた環境変数の設定にあるようです: Centos 7のPostgresサービスの環境変数 問題はPGDATAですデフォルトのPGDATA変数を使用する/usr/lib/systemd/system/postgresql-9.3.serviceの内容から作成する必要があるカスタムの/etc/systemd/system/postgresql-9.3.service内に設定される変数。

6

postgresql.serviceにカスタム/etc/systemd/system/ファイルを作成する必要があります。これにより、デフォルトのPGDATA環境変数が上書きされます。カスタムサービスファイルはデフォルトのpostgresqlサービスファイルを.includeできるため、変更するものを追加するだけで済みます。そうすれば、アップグレードでも変更/改善できますか?変更が保存されている間、デフォルトのサービスファイルにあるもの。

これは私が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

更新:

ファイルを手動で作成して.include行を追加するのではなく、systemdの組み込み方法を使用することもできます。

systemctl edit postgresql.service

これにより、デフォルトのエディターが開き、変更内容が/etc/systemd/system/postgresql.service.d/override.confに保存されます

5
mivk

これを試して:

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

これを行うための最も「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.service

# 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/init.d/postgresql-9.3を編集してみてください:PGDATA =/your/custom/path

0