データディレクトリからpostgres.confパスを再配置して更新する方法

データディレクトリからpostgres.confパスを再配置して更新する方法

Postgresql-9.4 HA環境の設定中にpostgres dbを初期化すると、データディレクトリが作成され、RHEL 7データディレクトリにpostgresql.confファイルが含まれますpg_hba.conf。ここでは、マスターレプリケーション中に構成ファイルを上書きしたため、データディレクトリに構成ファイルを作成すると競合が発生することが予想されます。

postgres.confそのため、データディレクトリからファイルを再配置し、再配置された設定ファイルを使用してみました。設定ファイルのパスをどこで更新しますか?pg_hba.confpostgres service

修正する:/usr/lib/systemd/system/postgresql-9.4.service再配置されたconfファイルを指すようにPGDATAを更新しました。新しいpostgres.confファイルで、データディレクトリとhba_fileパスが更新されます。サービスを再起動しようとしましたが、エラーが返されました。

Job for postgresql-9.4.service failed. See 'systemctl status postgresql-9.4.service' and 'journalctl -xn' for details.

答え1

最近同じ問題が発生しました。実際の質問は、ポストマスターに実際の構成ファイルの場所をどのように伝えるかです。私たちがしなければならないのは、-c config_file <configuration/filename/location>postgresプロセスにコマンドラインオプションを追加することだけです。問題はこれを行う方法です...?

昔、遠い銀河には、/etc/sysconfigディレクトリにあるいくつかのファイルにコマンドラインオプションを設定できるSystem V初期化スクリプトがありました。しかし今、私たちは強力で高度なシステムを備えています。したがって、設定ファイルとデータファイルを分離する唯一の方法は、postgresql systemd initシステムを設定することです。この目標を達成する方法は?これが私がしたことです:

  1. まず、設定ファイルpostgresql.conf、pg_hba.conf、およびpg_ident.confを外部ディレクトリに移動します。/var/lib/pgsql/config

  2. postgresql.confで上記のファイルの新しい場所を設定しました。

     hba_file = '/var/lib/pgsql/config/pg_hba.conf'
     ident_file = '/var/lib/pgsql/config/pg_ident.conf'
    
  3. 既存の(システム)設定を上書きしてsystemd postgresql.serviceを編集しました。

    systemctl edit postgresql.service
    

    これにより、新しい空のシステムサービスファイル/etc/systemd/system/postgresql.service.d/override.confが作成され、$EDITORエディタで開きます。

  4. 私はそこに置いた:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT} -c config_file=/var/lib/pgsql/config/postgresql.conf" -w -t 300
    

    ご覧のとおり、-oパラメータに文字列 "-c config_file /var/lib/pgsql/config/postgresql.conf"を追加しました。もう一つの興味深い点は null: "ExecStart" ディレクティブです。 「オーバーライド」と呼ばれますが、まずこのディレクティブを0に設定する必要があります。そうしないと、「postgresql.serviceに複数のExecStart =設定があります...」というエラーが発生します。

  5. サービスを再起動します。 systemctl restart postgresql

    私はPostgresqlが大好きです。 Postgresqlのデータファイルは$ PGDATAにあり、設定ファイルは別の場所にあります。

    /usr/bin/postgres -D /var/lib/pgsql/data -p 5432 -c config_file=/var/lib/pgsql/config/postgresql.conf
    

CentOS 7とRHEL7でこれを行いましたが、すべてのシステムベースのOSで動作したいと思います。

この物語が誰かに役立つことを願っています。

挨拶。

答え2

見つけました。このページ公式Postgresqlのウェブサイトで詳細な指示を確認してください。

データディレクトリ以外の場所に設定ファイルを保持するには、postgres -DコマンドラインオプションまたはPGDATA環境変数が設定ファイルを含むディレクトリを指す必要があり、data_directoryパラメータはpostgresql.confで設定する必要があります。 (またはコマンドラインから)データディレクトリの実際の場所を表示します。 data_directory はデータディレクトリの場所に対して -D および PGDATA をオーバーライドしますが、設定ファイルの場所はオーバーライドしません。

必要に応じて、config_file、hba_file、および/またはident_fileパラメーターを使用して、構成ファイル名と場所を個別に指定できます。 config_fileはpostgresコマンドラインでのみ指定できますが、他のエントリはデフォルトの設定ファイルで設定できます。 3つのパラメーターとdata_directoryの両方が明示的に設定されている場合は、-DまたはPGDATAを指定する必要はありません。

これらのパラメータのいずれかが設定されると、相対パスはpostgresが起動されるディレクトリに基づいて解釈されます。

echo $PGDATAホストシステムの出力は何ですか?

関連情報