postgresql - postgres - Ahora() sin zona horaria
ajustar hora postgres (3)
Pues puedes hacer algo como:
SELECT now() AT TIME ZONE current_setting(''TimeZone'');
SELECT now() AT TIME ZONE ''Europe/Paris'';
SELECT now() AT TIME ZONE ''UTC'';
No estoy seguro de cómo eso tiene sentido para una columna "added_at". Casi siempre desea una marca de tiempo absoluta (marca de tiempo con zona horaria) no flotante.
Editar respondiendo a los puntos a continuación:
Sí, debe usar la marca de tiempo con la zona horaria (tiempo absoluto) a menos que tenga una buena razón para no hacerlo.
La zona horaria del cliente viene dada por
SHOW TimeZone
ocurrent_setting(...)
como se muestra arriba.
Tómese un tiempo para hojear los manuales: cubren todo esto bastante bien.
Tengo una columna added_at
de tipo timestamp without time zone
. Quiero que su valor predeterminado sea la fecha y hora actual, pero sin zona horaria. La función now()
devuelve una zona horaria.
¿Cómo resuelvo ese problema?
CURRENT_TIME y CURRENT_TIMESTAMP entregan valores con zona horaria; LOCALTIME y LOCALTIMESTAMP entregan valores sin zona horaria.
SELECT now()::timestamp
Eso es todo. La conversión convierte la marca de tiempo a la marca de tiempo actual de su zona horaria. También es así como se implementa la función de SQL estándar LOCALTIMESTAMP
en Postgres.
Si no operas en múltiples zonas horarias, eso funciona bien. De lo contrario, cambie a timestamptz
para added_at
. ¿La diferencia?