sql >> Base de Datos >  >> RDS >> PostgreSQL

Cambiar el valor de la zona horaria de los datos

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;