構成ファイルとデータが別々の場所/パーティションにあるpostgresサーバーを起動しようとしています
centos 7のYUMを使用して、公式リポジトリを使用してpostgresql-10がインストールされました
そしてそれは使用して初期化されています
/usr/pgsql-10/bin/pg_ctl initdb --pgdata=/var/lib/pgsql/10/data
ユーザーとしてapp
PGDATA(構成)ディレクトリーと呼ばれるものは、デフォルトのディレクトリーです。
# ls -salt /var/lib/pgsql/10/data
total 120
4 drwxrwxr-x. 19 app app 4096 Nov 10 17:29 .
データの保存に次のディレクトリを使用したいと思います。
# ls -salt /usr/ip-spotlight/postgresql/
total 12
4 drwxrwxr-x. 3 postgres postgres 4096 Nov 10 17:43 .
4 drwx------. 2 postgres postgres 4096 Nov 10 17:43 data
そしてそれは不満を言う:
2017-11-10 17:51:44.495 CET [81743] FATAL: "/usr/ip-spotlight/postgresql/data" is not a valid data directory
2017-11-10 17:51:44.495 CET [81743] DETAIL: File "/usr/ip-spotlight/postgresql/data/PG_VERSION" is missing.
一方、 https://www.postgresql.org/docs/current/static/runtime-config-file-locations.html には次のように記載されています:
必要に応じて、config_file、hba_file、および/またはident_fileパラメータを使用して、構成ファイルの名前と場所を個別に指定できます。 config_fileはpostgresコマンドラインでのみ指定できますが、その他はメインの構成ファイル内で設定できます。
ぼくの /var/lib/pgsql/10/data/postgresql.conf
は次のように構成されています:
data_directory = '/usr/ip-spotlight/postgresql/data'
hba_file = '/var/lib/pgsql/10/data/pg_hba.conf'
ident_file = '/var/lib/pgsql/10/data/pg_ident.conf'
Postgresqlの設定ファイルと実際のデータストレージを分離する方法を教えてください。
OK、私はそれを理解しました:
ユーザーpostgres
としてデータベースを初期化します
name: "Create a new PostgreSQL database cluster"
become: postgres
command: "/usr/pgsql-{{ postgres_version.major }}/bin/pg_ctl initdb --pgdata={{ postgres_data }}"
ignore_errors: yes
systemdを介してPGDATA
環境変数を上書きする
name: "Override PGDATA pathname (1/3)"
become: yes
file: path="/etc/systemd/system/postgresql-{{ postgres_version.major }}.service" state=touch owner=root group=root mode=0644
when: dev.platform == "baremetal"
name: "Override PGDATA pathname (2/3)"
become: yes
lineinfile: path="/etc/systemd/system/postgresql-{{ postgres_version.major }}.service" line=".include /lib/systemd/system/postgresql-{{ postgres_version.major }}.service" state=present
when: dev.platform == "baremetal"
name: "Override PGDATA pathname (3/3)"
become: yes
blockinfile:
path: "/etc/systemd/system/postgresql-{{ postgres_version.major }}.service"
state: present
block: |
[Service]
Environment=PGDATA={{ postgres_data }}
when: dev.platform == "baremetal"
notify:
reload-systemd