Postgres를 Docker 컨테이너로 실행하는 것에 대한 질문입니다. 1. 시간대, 2. global.stat

Postgres를 Docker 컨테이너로 실행하는 것에 대한 질문입니다. 1. 시간대, 2. global.stat

나는 꽤 오랫동안 Postgres를 Docker 컨테이너로 실행해 왔습니다. 처음에는 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가 아닌 로컬 영역으로 설정하는 것이 좋습니다.

다른 문제는 관련이 없으며 여기에 언급되어 있습니다. 경고: 통계 파일 "pg_stat_tmp/global.stat"을 열 수 없습니다. 작업이 허용되지 않습니다.

간단히:

해당 데이터베이스 인덱스는 Docker 패키지 루트에 있는 호스트의 폴더에 매핑되며 데이터베이스에 관한 한 다른 모든 것은 잘 작동하는 것 같습니다. Mac을 사용하고 있지만 DB 폴더에 대한 CLI 권한을 나열하면 다음과 같은 결과가 표시됩니다.

-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에서는 "통계 파일" 경고도 발생하지만 문제를 일으키지 않는 것 같습니다.

감사해요.

관련 정보