Docker コンテナとして postgres を実行することに関する質問。1. TimeZone、2. global.stat

Docker コンテナとして postgres を実行することに関する質問。1. TimeZone、2. global.stat

私はかなり長い間、Docker コンテナとして postgres を実行してきました。最初は、TZ と PGTZ が設定されていなかったため、デフォルトで UTC になっていたと思います。私の開発システムでは、docker-compose.yml で次のことを試しました。

  postgres:
    image: postgres:13
    ports: ["5557:5432"]
    restart: unless-stopped
    volumes:
       - ./Index:/var/lib/postgresql/data
    environment:
       TZ: "America/Cayman"
       PGTZ: "America/Cayman"
       POSTGRES_PASSWORD: "postgres"

これにより、ローカル タイムゾーンの調整が行われるようです。DB トランザクション履歴やログ ファイルなどに問題が発生するのではないかと心配しているため、これをライブ システムに展開していません。DB の整合性は現在良好で、かなり前のバックアップも取得しています。タイムゾーンを設定する必要があるかどうかはわかりませんが、すべてのコンテナーを UTC ではなくローカル ゾーンに設定すると便利です。

もう 1 つの問題は無関係ですが、ここでも少し触れられています。 警告: 統計ファイル「pg_stat_tmp/global.stat」を開けませんでした: 操作は許可されていません

簡単に言うと:

そのデータベース インデックスは、Docker パッケージのルートにあるホスト上のフォルダーにマップされており、データベースに関する限り、他のすべては正常に動作しているようです。私は Mac を使用していますが、CLI から DB フォルダーの権限を一覧表示すると、次のようになります。

-rw-------@  1 sscotti  staff      3 Feb 22 11:01 PG_VERSION
drwx------@  6 sscotti  staff    192 Feb 22 11:54 base
drwx------@ 60 sscotti  staff   1920 Feb 22 16:00 global
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_commit_ts
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_dynshmem
-rw-------@  1 sscotti  staff   4782 Feb 22 11:02 pg_hba.conf
-rw-------@  1 sscotti  staff   1636 Feb 22 11:01 pg_ident.conf
drwx------@  5 sscotti  staff    160 Feb 22 17:46 pg_logical
drwx------@  4 sscotti  staff    128 Feb 22 11:01 pg_multixact
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_notify
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_replslot
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_serial
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_snapshots
drwx------@  2 sscotti  staff     64 Feb 22 16:00 pg_stat
drwx------@  5 sscotti  staff    160 Feb 22 17:50 pg_stat_tmp
drwx------@  3 sscotti  staff     96 Feb 22 11:01 pg_subtrans
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_tblspc
drwx------@  2 sscotti  staff     64 Feb 22 11:01 pg_twophase
drwx------@  4 sscotti  staff    128 Feb 22 11:01 pg_wal
drwx------@  3 sscotti  staff     96 Feb 22 11:01 pg_xact
-rw-------@  1 sscotti  staff     88 Feb 22 11:01 postgresql.auto.conf
-rw-------@  1 sscotti  staff  28073 Feb 22 11:01 postgresql.conf
-rw-------@  1 sscotti  staff     36 Feb 22 16:00 postmaster.opts
-rw-------   1 sscotti  staff     94 Feb 22 16:00 postmaster.pid

pg_stat folder is actually empty.

and pg_stat_temp has:

-rw-------  1 sscotti  staff   1952 Feb 22 17:54 db_0.stat
-rw-------  1 sscotti  staff  20360 Feb 22 17:54 db_13395.stat
-rw-------  1 sscotti  staff   1151 Feb 22 17:54 global.stat

問題は、DB ファイルが Docker ボリュームではなく、ホスト上のローカル フォルダーにバインドされていることのようです。ホストから簡単にアクセスできるローカル フォルダーにバインドする方がはるかに便利ですが、それに関連するアクセス許可の問題があると思います。実際にはボリュームに変更したいかもしれませんが、ボリュームは永続的で、バックアップに使用するローカル NAS またはクラウド サービスに簡単にバックアップできる必要があります。

MacOS 用の Docker Desktop では、ボリュームではなくバインドされたフォルダーを使用するとパフォーマンスが若干低下するようです。ただし、LINUX では問題は発生しないようです。ただし、「統計ファイル」の警告も発生します。

ありがとう。

関連情報