Es mucho más eficiente establecer la zona horaria para su sesión de importación que actualizar los valores más tarde.
Tengo la impresión de que piensa en la zona horaria como una configuración que se aplica a los valores de las tablas que, de lo contrario, no cambiarían. Pero no es así en absoluto. Piense en ello como un modificador de entrada/salida. timestamp
real los valores (con o sin zona horaria) son siempre almacenado como marcas de tiempo UTC internamente (número de segundos desde '2000-01-01 00:00'
). Muchos más detalles:
La UPDATE
en su segundo ejemplo, duplica el tamaño de la tabla, ya que cada fila se invalida y se agrega una nueva versión (así es como UPDATE
funciona con MVCC
en Postgres). Además de la costosa operación, VACUUM
tendrá que hacer más trabajo más tarde para limpiar la mesa. Muy ineficiente.
Es perfectamente seguro para SET
la zona horaria local para la sesión. Esto no afecta las operaciones concurrentes de ninguna manera. Por cierto, SET SESSION
es lo mismo que simple SET
porque SESSION
es el predeterminado de todos modos.
Si quieres ser absolutamente claro, puede limitar la configuración a la transacción actual con SET LOCAL
. Cito el manual aquí
Juntar:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Comprobar:
SHOW timezone;