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;