Много е по-ефективно е да зададете часовата зона за вашата сесия за импортиране, отколкото да актуализирате стойностите по-късно.
Имам впечатлението, че мислите за часовата зона като за настройка, която се прилага към иначе непроменени стойности в таблиците. Но съвсем не е така. Мислете за това като входно/изходен модификатор. Действително timestamp
стойностите (със или без часова зона) са винаги съхранени като UTC времеви клейма вътрешно (брой секунди от '2000-01-01 00:00'
). Много повече подробности:
UPDATE
във втория ви пример удвоява размера на таблицата, тъй като всеки един ред е невалиден и се добавя нова версия (ето как UPDATE
работи с MVCC
в Postgres). В допълнение към скъпата операция, VACUUM
ще трябва да свърши повече работа по-късно, за да изчисти подуването на масата. Много неефективно.
Той енапълно безопасен към SET
местната часова зона за сесията. Това не засяга по никакъв начин едновременните операции. BTW, SET SESSION
е същото като обикновен SET
защото SESSION
така или иначе е по подразбиране.
Ако искате да сте абсолютно Разбира се, можете да ограничите настройката до текущата транзакция с SET LOCAL
. Цитирам ръководството тук
Съберете заедно:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Проверка:
SHOW timezone;