データディレクトリから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で動作したいと思います。

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

挨拶。

おすすめ記事