Det är mycket effektivare att ställa in tidszonen för din importsession än att uppdatera värdena senare.
Jag får intrycket att du tänker på tidszonen som en inställning som gäller för annars oförändrade värden i tabellerna. Men det är inte alls så. Se det som en ingångs-/utgångsmodifierare. Faktisk timestamp
värden (med eller utan tidszon) är alltid lagras som UTC-tidsstämplar internt (antal sekunder sedan '2000-01-01 00:00'
). Mycket mer information:
UPDATE
i ditt andra exempel fördubblas tabellens storlek, eftersom varje enskild rad blir ogiltig och en ny version läggs till (det är så UPDATE
fungerar med MVCC
i Postgres). Förutom den dyra operationen, VACUUM
kommer att behöva göra mer arbete senare för att städa upp bordssvällningen. Mycket ineffektivt.
Det är helt säkert till SET
den lokala tidszonen för sessionen. Detta påverkar inte samtidiga operationer på något sätt. BTW, SET SESSION
är samma som vanlig SET
eftersom SESSION
är standard ändå.
Om du vill vara absolut visst, du kan begränsa inställningen till den aktuella transaktionen med SET LOCAL
. Jag citerar manualen här
Sätt ihop:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Kontrollera:
SHOW timezone;