
He estado ejecutando postgres como contenedor Docker durante bastante tiempo. Inicialmente, TZ y PGTZ no estaban configurados, por lo que creo que el valor predeterminado era UTC. En mi sistema de desarrollo probé lo siguiente en 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"
y eso parece hacer el ajuste a la zona horaria local. No lo he implementado en un sistema activo porque me pregunto si eso arruinará algo con respecto al historial de transacciones de la base de datos y los archivos de registro, etc. La integridad de la base de datos está bien ahora y tengo una copia de seguridad que se remonta bastante tiempo atrás. No estoy seguro de que sea realmente necesario configurar la zona horaria, pero es bueno tener todos los contenedores configurados en la zona local en lugar de UTC.
El otro problema no está relacionado y se menciona aquí: ADVERTENCIA: no se pudo abrir el archivo de estadísticas "pg_stat_tmp/global.stat": operación no permitida
Brevemente:
Ese índice de base de datos está asignado a una carpeta en el host en la raíz del paquete Docker, y todo lo demás parece funcionar bien en lo que respecta a la base de datos. Estoy usando una Mac, pero si enumero el permiso de CLI para la carpeta DB, obtengo:
-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
El problema parece ser que los archivos de base de datos están vinculados a una carpeta local en el host en lugar de a un volumen Docker. Es mucho más conveniente tenerlo vinculado a una carpeta local de fácil acceso desde el host, pero creo que hay algunos problemas de permisos relacionados con eso. De hecho, es posible que desee cambiar a un volumen, pero el volumen aún tiene que ser persistente y tener una copia de seguridad fácil en un NAS local o en un servicio de nube que usemos para la copia de seguridad.
Con Docker Desktop para MacOS, parece haber un pequeño impacto en el rendimiento al usar carpetas vinculadas en lugar de volúmenes, pero en LINUX no parece causar un problema, aunque la advertencia de "archivo de estadísticas" también aparece allí.
Gracias.