Primero, he leído mucho sobre los tipos de fecha en Postgres usando la zona horaria o no. Parece que administrar las fechas (marcas de tiempo) con la zona horaria es lo mejor que se puede hacer en el 99% de los casos.
Actualmente he creado un motor de sincronización utilizando una aplicación Rails configurada en hora UTC de forma predeterminada (muy importante) y fechas de gestión de MariaDB (por lo que las fechas UTC están escritas en la base de datos pero sin ver nada excepto la fecha: 2017-04-19 17:45 :09 ). Los dispositivos que se sincronizan con el motor del servidor también usan una base de datos SQLite local con fechas en UTC. Entonces, para el mismo documento, puedo ver la misma fecha para un campo created_at en el campo SQLite y en el campo MariaDB. Está funcionando bien.
Tenga en cuenta que los usuarios nunca tienen que establecer una zona horaria personalizada en la aplicación del servidor y en las aplicaciones del dispositivo. Quiero todo UTC.
Como planeo migrar a PostgreSQL por muchas razones, estoy bastante seguro de que también necesito usar Timestamp sin zona horaria, pero tengo algunas dudas después de todas las lecturas.
¿Cuáles son sus sugerencias sobre este caso de uso?
EDITAR :
Así que hice 3 pruebas usando pgloader :
Test1 : MariaDB => PostgreSQL usando la zona horaria predeterminada de la computadora
Las fechas son las mismas pero como pueden ver, a veces hay +01, a veces +02 ???
Test2 : MariaDB => PostgreSQL usando la zona horaria después de configurar la zona horaria en UTC en Postgres
Aquí hay +00, lógico para UTC, pero cambiaron mis fechas.
Test3 : MariaDB => PostgreSQL usando la marca de tiempo SIN zona horaria
Todo lo mismo allí.
"Con zona horaria" simplemente le dice a postgres que convierta la hora local a UTC antes de almacenar la marca de tiempo, y que vuelva a convertir a la hora local al realizar la consulta. Los datos subyacentes se almacenan en UTC y no se almacena información de zona horaria en los datos reales, es simplemente un indicador que usa la base de datos para determinar cómo convertir los datos para uso humano.
Si la conexión de su cliente está configurando la zona horaria de PG en UTC en la conexión DB, prácticamente no habrá diferencia. La sabiduría convencional dice que siempre use marcas de tiempo con zona horaria, ya que hará que las consultas en otros sistemas (cliente postgresql) sean mucho más flexibles y fáciles de usar en el futuro.
intente con uno de estos en su archivo de configuración
SET timezone= 'UTC' SET client_timezone TO '+00:00'mi configuración completa fue:
LOAD DATABASE FROM mysql://usr@localhost/kk INTO postgresql://usr:pwd@localhost/kk WITH include drop, create tables, create indexes, reset sequences, workers = 8, concurrency = 1, multiple readers per thread, rows per range = 50000 SET PostgreSQL PARAMETERS maintenance_work_mem to '512MB', work_mem to '64MB', timezone to 'UTC' SET MySQL PARAMETERS net_read_timeout = '220', net_write_timeout = '220' SET timezone= 'UTC' SET client_timezone TO '+00:00' ALTER SCHEMA 'kk' RENAME TO 'public' ;