/var/lib/pgsql/15/data/postgresql.confとか、/var/lib/pgsql/data/postgresql.confにあるファイルを更新したとき、
「これはPostgreSQLの再起動が必要なのか・・・?」と不安に思うことがあるはず。
不安というのは設定が間違っていた時、起動に失敗してシステムが閲覧できないという恐怖が背景にあるからなんだけど、これを明確にするため、要不要のチェックをする手順を記載します!
目次
pg_settingsを確認する
現在稼働しているPostgreSQLの設定値は、pg_settingsというシステムビューで確認することができます。
とりあえず設定値を確認するだけなら、下記のように実行すればOK。
postgres=# select name,context from pg_settings ;
name | context
----------------------------------------+-------------------
allow_in_place_tablespaces | superuser
allow_system_table_mods | superuser
application_name | user
archive_cleanup_command | sighup
archive_command | sighup
archive_library | sighup
archive_mode | postmaster
...
- パラメータ名(name)
- 設定反映ルール(context)
contextの内訳
context | パラメータ例 | 概要 |
---|---|---|
internal | block_size lc_collate ... | 設定を直接変更できない項目。 initdbで変更可能な項目となりデータベースクラスタの再構成という大工事が必要な設定値を指す。 |
postmaster | autovacuum_freeze_max_age port ... | サーバ起動時に反映される項目。 変更には再起動が必要、設定ファイルの構文ミスがあると再起動が失敗するので怖い。 |
sighup | autovacuum fsync ... | 変更に再起動は必要なく、設定ファイルのリロードで反映される項目。 リロード後に新しく発生したセッションはすべて反映後の値で動作する。 |
superuser-backend | jit_debugging_support log_connections ... | 変更に再起動は必要なく、設定ファイルのリロードで反映される項目。 変更にはスーパーユーザ権限か、SET権限が必要。 セッション開始後に変更することができない。 |
backend | ignore_system_indexes post_auth_delay | 変更に再起動は必要なく、設定ファイルのリロードで反映される項目。 セッション開始後に変更することができない。 |
superuser | lc_messages log_min_duration_statement ... | 変更に再起動は必要なく、設定ファイルのリロードで既存セッション含め即時反映される項目。 またSET文で接続中セッションに即時に反映させられる。 この時他のセッションには影響しない。 SET文にはスーパーユーザ権限か、SET権限が必要。 SET文の変更は接続中セッションを閉じると設定は破棄される。 |
user | client_encoding enable_seqscan ... | 変更に再起動は必要なく、設定ファイルのリロードで既存セッション含め即時反映される項目。 またSET文で接続中セッションに即時に反映させられる。 この時他のセッションには影響しない。 全てのユーザで実行が可能。 SET文の変更は接続中セッションを閉じると設定は破棄される。 |
SET文の変更タイミングについて
同セッション内で即時反映。
他のセッションには反映されないので検証などに。
#SET例(SET パラメータ名=値;)
postgres=# set log_min_duration_statement = 1;
SET
失敗例
contextがsuperuserかuserでない項目はエラーする。
postgres=# set fsync = off;
ERROR: 現在パラメータ"fsync"を変更できません
ALTER SYSTEM文の変更タイミングについて
即時に反映はされず、PostgreSQLのreloadか再起動が必要。
#ALTER SYSTEM例(ALTER SYSTEM SET パラメータ名=値;)
postgres=# alter system set log_min_duration_statement =0;
ALTER SYSTEM
変更後postgresql.confと同じディレクトリに、postgresql.auto.confファイルが作成され、reloadや再起動時に設定されるようになる。
※このファイルが残り続けていると、postgresql.confを変更してもautoファイル側で上書きしてしまうため、不要になったら削除した方がいいと思う。
失敗例
contextがinternalの項目はエラーする。
postgres=# alter system set block_size=8192;
ERROR: パラメータ"block_size"を変更できません
まとめ
古いポスグレだとログがとられておらず、
「ログでも設定するか~」とパラメータを変更したものの、再起動コマンドでうまくいくかずっと不安でした。
構文があってるかはもとより、古いサーバだと何か良からぬことが起こらないかという不安の方が強く、なるべく再起動したくないという思いがある。
※ログはreloadで済むものが多いので良かった。
簡単な保守だったらreloadで済む印象なので、この確認ができることによってだいぶ気楽に。
気の重いパラメータはもちろんあるけど、それは覚悟かなぁ。。。
「ログでも設定するか~」とパラメータを変更したものの、再起動コマンドでうまくいくかずっと不安でした。
構文があってるかはもとより、古いサーバだと何か良からぬことが起こらないかという不安の方が強く、なるべく再起動したくないという思いがある。
※ログはreloadで済むものが多いので良かった。
簡単な保守だったらreloadで済む印象なので、この確認ができることによってだいぶ気楽に。
気の重いパラメータはもちろんあるけど、それは覚悟かなぁ。。。