Det er meget mere effektivt at indstille tidszonen for din importsession end at opdatere værdierne senere.
Jeg får indtryk af, at du tænker på tidszonen som en indstilling, der gælder for ellers uændrede værdier i tabellerne. Men sådan er det slet ikke. Tænk på det som en input/output modifikator. Faktisk timestamp
værdier (med eller uden tidszone) er altid gemt som UTC-tidsstempler internt (antal sekunder siden '2000-01-01 00:00'
). Mange flere detaljer:
UPDATE
i dit andet eksempel fordobles størrelsen af tabellen, da hver enkelt række er ugyldig og en ny version tilføjet (det er sådan UPDATE
fungerer med MVCC
i Postgres). Ud over den dyre operation, VACUUM
bliver nødt til at gøre mere arbejde senere for at rydde op i bordet. Meget ineffektiv.
Det er helt sikkert til SET
den lokale tidszone for sessionen. Dette påvirker ikke samtidige operationer på nogen måde. BTW, SET SESSION
er det samme som almindelig SET
fordi SESSION
er standard alligevel.
Hvis du vil være absolut sikker på, du kan begrænse indstillingen til den aktuelle transaktion med SET LOCAL
. Jeg citerer manualen her
Sæt sammen:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Tjek:
SHOW timezone;