Ejemplo con la inspección 250:

Guardado en BD: 2025-12-08 19:11:30+00 (hora de Canarias)
Mostrado en tu cliente: 2025-12-08 16:11:30-03 (convertido a Paraguay, 3 horas menos)
Ambas representan el MISMO momento en el tiempo, solo que en zonas horarias diferentes.

🌍 Resumen del Sistema
Componente	Zona Horaria	Estado
PostgreSQL (almacenamiento)	+00 Atlantic/Canary	 CORRECTO
Backend FastAPI	Atlantic/Canary	 CORRECTO
Frontend (usuario)	Local del navegador	 CORRECTO (convierte automáticamente)
Tu cliente PostgreSQL	-0300 Paraguay	ℹ️ Solo afecta cómo VES las fechas
💡 Conclusión
This commit is contained in:
2025-12-09 00:46:16 -03:00
parent 1b0a50338e
commit 037c4baf1b
6 changed files with 130 additions and 1 deletions

40
apply-timezone.bat Normal file
View File

@@ -0,0 +1,40 @@
@echo off
echo ====================================
echo Aplicando configuracion de timezone
echo ====================================
echo.
echo 1. Copiando script de migracion...
docker cp migrations/force_timezone_all_sessions.sql checklist-db:/tmp/
echo.
echo 2. Ejecutando migracion en checklist_db...
docker exec checklist-db psql -U checklist_user -d checklist_db -f /tmp/force_timezone_all_sessions.sql
echo.
echo 3. Ejecutando migracion en syntria_db (si existe)...
docker exec checklist-db psql -U checklist_user -d postgres -c "SELECT 1 FROM pg_database WHERE datname = 'syntria_db'" | find "1" >nul
if %ERRORLEVEL% equ 0 (
docker exec checklist-db psql -U syntria_user -d syntria_db -f /tmp/force_timezone_all_sessions.sql
echo Migración aplicada a syntria_db
) else (
echo syntria_db no existe, omitiendo...
)
echo.
echo 4. Recargando configuracion de PostgreSQL...
docker exec checklist-db psql -U checklist_user -d checklist_db -c "SELECT pg_reload_conf();"
echo.
echo 5. Verificando timezone...
docker exec checklist-db psql -U checklist_user -d checklist_db -c "SHOW timezone;"
echo.
echo ====================================
echo Completado!
echo ====================================
echo.
echo IMPORTANTE: Desconecta y reconecta tu cliente PostgreSQL
echo para que aplique la nueva zona horaria.
echo.
pause

39
apply-timezone.sh Normal file
View File

@@ -0,0 +1,39 @@
#!/bin/bash
echo "===================================="
echo "Aplicando configuración de timezone"
echo "===================================="
echo ""
echo "1. Copiando script de migración..."
docker cp migrations/force_timezone_all_sessions.sql checklist-db:/tmp/
echo ""
echo "2. Ejecutando migración en checklist_db..."
docker exec checklist-db psql -U checklist_user -d checklist_db -f /tmp/force_timezone_all_sessions.sql
echo ""
echo "3. Ejecutando migración en syntria_db (si existe)..."
if docker exec checklist-db psql -U checklist_user -d postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'syntria_db'" | grep -q 1; then
docker exec checklist-db psql -U syntria_user -d syntria_db -f /tmp/force_timezone_all_sessions.sql
echo "Migración aplicada a syntria_db"
else
echo "syntria_db no existe, omitiendo..."
fi
echo ""
echo "4. Recargando configuración de PostgreSQL..."
docker exec checklist-db psql -U checklist_user -d checklist_db -c "SELECT pg_reload_conf();"
echo ""
echo "5. Verificando timezone..."
docker exec checklist-db psql -U checklist_user -d checklist_db -c "SHOW timezone;"
echo ""
echo "===================================="
echo "Completado!"
echo "===================================="
echo ""
echo "IMPORTANTE: Desconecta y reconecta tu cliente PostgreSQL"
echo "para que aplique la nueva zona horaria."
echo ""

View File

@@ -13,6 +13,8 @@ services:
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
- ./postgres-custom.conf:/etc/postgresql/postgresql.conf
command: postgres -c config_file=/etc/postgresql/postgresql.conf
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-checklist_user} -d ${POSTGRES_DB:-checklist_db}"]
interval: 10s

View File

@@ -2,12 +2,19 @@
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
-- Configurar zona horaria Atlantic/Canary
ALTER DATABASE "$POSTGRES_DB" SET timezone TO 'Atlantic/Canary';
ALTER ROLE "$POSTGRES_USER" SET timezone TO 'Atlantic/Canary';
-- Verificar que la base de datos existe
SELECT 'Database is ready!' as status;
-- Crear extensiones si son necesarias
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Mostrar zona horaria configurada
SHOW timezone;
EOSQL
echo "Database initialization completed successfully!"
echo "Database initialization completed successfully with timezone: Atlantic/Canary"

View File

@@ -0,0 +1,17 @@
-- Forzar zona horaria Atlantic/Canary en TODAS las sesiones
-- Esto anula cualquier configuración del cliente
-- 1. Establecer timezone por defecto para la base de datos
ALTER DATABASE checklist_db SET timezone TO 'Atlantic/Canary';
ALTER DATABASE syntria_db SET timezone TO 'Atlantic/Canary';
-- 2. Establecer timezone por defecto para todos los usuarios
ALTER ROLE checklist_user SET timezone TO 'Atlantic/Canary';
ALTER ROLE syntria_user SET timezone TO 'Atlantic/Canary';
ALTER ROLE postgres SET timezone TO 'Atlantic/Canary';
-- 3. Verificar configuración actual
SHOW timezone;
-- 4. Para aplicar los cambios, desconectar y reconectar
-- O forzar: SELECT pg_reload_conf();

24
postgres-custom.conf Normal file
View File

@@ -0,0 +1,24 @@
# Configuración de PostgreSQL para Ayutec
# Zona horaria: Atlantic/Canary (Islas Canarias, España)
# ZONA HORARIA
timezone = 'Atlantic/Canary'
log_timezone = 'Atlantic/Canary'
# LOCALE (opcional - para formato de fechas en español)
lc_messages = 'es_ES.UTF-8'
lc_monetary = 'es_ES.UTF-8'
lc_numeric = 'es_ES.UTF-8'
lc_time = 'es_ES.UTF-8'
# CONEXIONES
max_connections = 100
shared_buffers = 256MB
# LOGGING
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'mod' # Registrar INSERT, UPDATE, DELETE
log_duration = on
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '