2. プロセスとメモリー
2.3 インスタンス起動/停止時の動作
2.3.2 パラメーターの設定
ALTER SYSTEM 文で変更したパラメーターの値は「{PGDATA}/postgresql.auto.conf」
ファイルに書き込まれます。このファイルは手動で変更しないようにしてください。
例 17 ALTER SYSTEM文によるパラメーター変更
上記の例でもわかるように、ALTER SYSTEM文はインスタンスのパラメーターは変更 せず、postgresql.auto.confファイルのみ書き換えます。このファイルはインスタンス起動
時または pg_reload_conf 関数実行時に postgresql.conf ファイルが読み込まれた後解析さ
れ、値が適用されます。
ALTER SYSTEM 文 の パ ラ メ ー タ ー 値 と し て DEFAULT を 指 定 す る か 、ALTER
SYSTEM RESET文を実行すると、postgresql.auto.confファイルからパラメーターが削除
されます。
postgres=# SHOW work_mem ; work_mem
--- 4MB (1 row)
postgres=# ALTER SYSTEM SET work_mem = '8MB' ; ALTER SYSTEM
postgres=# SHOW work_mem ; work_mem
--- 4MB (1 row) postgres=# \q
$ cat data/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
work_mem = '8MB'
$
例 18 ALTER SYSTEM文によるパラメータ・リセット
□ パラメーター・ファイルとSET文の構文
複数の値を持つパラメーターをパラメーター・ファイルに記述する場合は、値をカンマ(,)
で区切り、全体をシングル・クオーテーション(’)で囲みます。一方、SET文でセッショ ンのパラメーターを変更する場合は、シングル・クオーテーションの指定は行いません。
SET 文のパラメーターをシングル・クオーテーションで囲むと単一の値として認識されま す。
例 19 ファイルとSET文の構文の違い
□ パラメーター記述形式とエラー
postgresql.conf ファイルには標準のパラメーター以外にContribモジュール等が使用す
る 独 自 の パ ラ メ ー タ ー を 記 述 で き ま す 。 多 く の 場 合 パ ラ メ ー タ ー 名 の 形 式 は
「{MODULENAME}.{PARAMETER}」です。インスタンス起動時、この形式で記述された パラメーターは正当性のチェックが行われません。Contribモジュール用のパラメーターが 間違って記述されていてもインスタンスは正常に起動されます。またSHOW文でも間違っ たパラメーター名のまま情報を取得できます。
このため Contrib モジュール用のパラメーターを設定する場合は、設定後に動作を確認 すべきです。
postgres=# ALTER SYSTEM SET work_mem = DEFAULT ; ALTER SYSTEM
postgres=# \q
$ cat data/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
$
$ grep temp_tablespaces ${PGDATA}/postgresql.conf temp_tablespaces = 'pg_default,ts1'
$ psql
postgres=# SET temp_tablespaces='ts2, ts3' ; ERROR: tablespace "ts2, ts3" does not exist postgres=# SET temp_tablespaces=ts2, ts3 ; SET
postgres=#
例 20 間違ったパラメーター名の記述
ALTER SYSTEM文ではContribモジュールのパラメーターもパラメーター名のチェッ
クが行われるため、間違った名前のパラメーターは設定できません。
□ パラメーター・ファイルの確認
パラメーター・ファイル(postgresql.conf, postgresql.auto.conf)の記述内容は、
pg_file_settings カタログから確認できます。このカタログに対する検索が行われる度
にファイル内容が解析され、ファイルに記述された情報を参照できます。
例 21 ファイル内容をカタログから確認
$ grep autoexplain postgresql.conf
autoexplain.loganalyze = true ← 正しくは auto_explain.log_analyze = true
$ pg_ctl –D data start –w waiting for server to start....
LOG: redirecting log output to logging collector process HINT: Future log output will appear in directory "pg_log".
done
server started ← 正常起動
$ psql
postgres=# SHOW autoexplain.loganalyze ; ← SHOW 文で参照可能 autoexplain.loganalyze
--- true
(1 row)
postgres=# ALTER SYSTEM SET port=5434 ; ALTER SYSTEM
postgres=# SELECT sourcefile, name, setting FROM pg_file_settings WHERE name = 'port' ;
sourcefile | name | setting ---+---+--- /usr/local/pglsq/data/postgresql.auto.conf | port | 5434 (1 row)