
Я уже довольно давно использую 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"
и это, кажется, делает настройку на локальный часовой пояс. Я не развертывал это в живой системе, потому что мне интересно, не испортит ли это что-нибудь в отношении истории транзакций БД и файлов журналов и т. д. Целостность БД теперь в порядке, и у меня есть резервная копия, охватывающая довольно много времени. Я не уверен, что это действительно необходимо, но довольно приятно иметь все контейнеры, установленные на локальный пояс, а не на UTC.
Другая проблема не связана с этой и упоминается здесь: ВНИМАНИЕ: не удалось открыть файл статистики "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 Volume. Гораздо удобнее привязать их к локальной папке, легко доступной с хоста, но я думаю, что с этим связаны некоторые проблемы с разрешениями. На самом деле я мог бы захотеть перейти на том, но том все равно должен быть постоянным и легко резервироваться на локальном NAS или облачном сервисе, которые мы используем для резервного копирования.
В Docker Desktop для MacOS, похоже, наблюдается небольшое снижение производительности при использовании связанных папок вместо томов, но в LINUX это, похоже, не вызывает проблем, хотя предупреждение «statistics file» появляется и там.
Спасибо.