È 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;