PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Modifica del valore del fuso orario dei dati

È molto più efficiente impostare il fuso orario per la sessione di importazione piuttosto che aggiornare i valori in un secondo momento.

Ho l'impressione che tu pensi al fuso orario come a un'impostazione che si applica a valori altrimenti invariati nelle tabelle. Ma non è affatto così. Pensalo come un modificatore di input / output. timestamp effettivo i valori (con o senza fuso orario) sono sempre memorizzati internamente come timestamp UTC (numero di secondi da '2000-01-01 00:00' ). Molti più dettagli:

Il UPDATE nel tuo secondo esempio raddoppia la dimensione della tabella, poiché ogni singola riga viene invalidata e viene aggiunta una nuova versione (ecco come UPDATE funziona con MVCC a Postgres). Oltre alla costosa operazione, VACUUM dovrà fare più lavoro in seguito per ripulire il tavolo gonfio. Molto inefficiente.

È perfettamente sicuro a SET il fuso orario locale per la sessione. Ciò non influisce in alcun modo sulle operazioni simultanee. A proposito, SET SESSION è lo stesso di semplice SET perché SESSION è comunque l'impostazione predefinita.

Se vuoi essere assolutamente certo, puoi limitare l'impostazione alla transazione corrente con SET LOCAL . Cito il manuale qui

Metti insieme:

BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;

Verifica:

SHOW timezone;