To dużo bardziej efektywne jest ustawienie strefy czasowej dla sesji importu niż późniejsza aktualizacja wartości.
Odnoszę wrażenie, że myślisz o strefie czasowej jak o ustawieniu, które stosuje się do innych niezmienionych wartości w tabelach. Ale wcale tak nie jest. Pomyśl o tym jako o modyfikatorze wejścia/wyjścia. Rzeczywista timestamp wartości (ze strefą czasową lub bez) są zawsze przechowywane jako znaczniki czasu UTC wewnętrznie (liczba sekund od '2000-01-01 00:00' ). Dużo więcej szczegółów:
UPDATE w drugim przykładzie podwaja rozmiar tabeli, ponieważ każdy wiersz jest unieważniany i dodawana jest nowa wersja (w ten sposób UPDATE współpracuje z MVCC
w Postgresie). Oprócz kosztownej operacji, VACUUM będzie musiał później wykonać więcej pracy, aby posprzątać wzdęcia stołu. Bardzo nieefektywny.
Jest całkowicie bezpieczny do SET lokalna strefa czasowa sesji. W żaden sposób nie wpływa to na współbieżne operacje. BTW, SET SESSION jest taki sam jak zwykły SET ponieważ SESSION i tak jest domyślna.
Jeśli chcesz być absolutnie oczywiście, możesz ograniczyć to ustawienie do bieżącej transakcji z SET LOCAL . Cytuję instrukcję tutaj
Razem:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Sprawdź:
SHOW timezone;