Het is veel efficiënter om de tijdzone voor uw importsessie in te stellen dan om de waarden later bij te werken.
Ik krijg de indruk dat je de tijdzone ziet als een instelling die van toepassing is op overigens ongewijzigde waarden in de tabellen. Maar zo is het helemaal niet. Zie het als een input / output-modifier. Werkelijke timestamp
waarden (met of zonder tijdzone) zijn altijd intern opgeslagen als UTC-tijdstempels (aantal seconden sinds '2000-01-01 00:00'
). Veel meer details:
De UPDATE
in uw tweede voorbeeld verdubbelt de grootte van de tabel, omdat elke afzonderlijke rij ongeldig wordt gemaakt en een nieuwe versie wordt toegevoegd (zo UPDATE
werkt met MVCC
in Postgres). Naast de dure operatie, VACUUM
zal later meer werk moeten doen om de tafelzwelling op te ruimen. Zeer inefficiënt.
Het is volkomen veilig naar SET
de lokale tijdzone voor de sessie. Dit heeft op geen enkele manier invloed op gelijktijdige bewerkingen. BTW, SET SESSION
is hetzelfde als gewoon SET
omdat SESSION
is sowieso de standaard.
Als je absoluut . wilt zijn natuurlijk, je kunt de instelling beperken tot de huidige transactie met SET LOCAL
. Ik citeer de handleiding hier
Samengevoegd:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Controleer:
SHOW timezone;