Я уже давно использую postgres как Docker Container. Изначально TZ и PGTZ не были установлены, поэтому я думаю, что по умолчанию было установлено UTC. В моей системе разработки я попробовал следующее в docker-compose.yml:
постгрес:
изображение: postgres:13
порты: ["5557:5432"]
перезапуск: если не остановлен
тома:
- ./Index:/var/lib/postgresql/данные
среда:
ТЗ: "Америка/Кайманы"
ПГТЗ: «Америка/Кайманы»
POSTGRES_PASSWORD: "постгрес"
и это, кажется, корректирует местный часовой пояс. Я не развертывал это в действующей системе, потому что мне интересно, не испортит ли это что-нибудь в отношении истории транзакций БД, файлов журналов и т. Д. С целостностью БД сейчас все в порядке, и у меня есть резервная копия, возвращающаяся довольно давно. Я не уверен, что действительно необходимо устанавливать часовой пояс, но неплохо, чтобы все контейнеры были настроены на локальную зону, а не на UTC.
Другая проблема не имеет отношения к делу и упоминается здесь: ВНИМАНИЕ: не удалось открыть файл статистики "pg_stat_tmp/global.stat": операция не разрешена
Кратко:
Этот индекс базы данных сопоставляется с папкой на хосте в корне пакета Docker, и все остальное, похоже, работает нормально, что касается базы данных. Я использую Mac, но если я укажу разрешение от CLI для папки БД, я получаю:
-rw-------@ 1 sscotti staff 3 22 фев 11:01 PG_VERSION
drwx------@ 6 sscotti staff 192 22 фев 11:54 база
drwx------@ 60 sscotti staff 1920 22 фев 16:00 глобально
drwx------@ 2 sscotti staff 64 Feb 22 11:01 pg_commit_ts
drwx------@ 2 sscotti staff 64 22 фев 11:01 pg_dynshmem
-rw-------@ 1 sscotti staff 4782 22 февраля 11:02 pg_hba.conf
-rw-------@ 1 sscotti staff 1636 22 фев 11:01 pg_ident.conf
drwx------@ 5 sscotti staff 160 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 22 фев 16:00 pg_stat
drwx------@ 5 sscotti staff 160 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 22 фев 11:01 postgresql.auto.conf
-rw-------@ 1 sscotti staff 28073 22 февраля 11:01 postgresql.conf
-rw-------@ 1 sscotti staff 36 22 фев 16:00 postmaster.opts
-rw------- 1 sscotti staff 94 22 фев 16:00 postmaster.pid
Папка pg_stat на самом деле пуста.
и pg_stat_temp имеет:
-rw------- 1 sscotti staff 1952 22 февраля 17:54 db_0.stat
-rw------- 1 sscotti staff 20360 22 фев 17:54 db_13395.stat
-rw------- 1 sscotti staff 1151 22 фев 17:54 global.stat
Похоже, проблема в том, что файлы БД привязаны к локальной папке на хосте, а не к тому Docker. Гораздо удобнее привязать его к локальной папке, легко доступной с хоста, но я думаю, что с этим связаны некоторые проблемы с разрешениями. Я мог бы на самом деле захотеть перейти на том, но этот том по-прежнему должен быть постоянным и легко резервироваться в локальный NAS или облачный сервис, который мы используем для резервного копирования.
С Docker Desktop для MacOS, похоже, немного снижается производительность при использовании связанных папок, а не томов, но в LINUX это, похоже, не вызывает проблем, хотя там также появляется предупреждение «файл статистики».
Спасибо.