PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zmiana wartości strefy czasowej danych

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyłączanie puli połączeń w Railsach, aby używać PgBouncer

  2. Jak korzystać z ustawień tcp_keepalives w Postgresql?

  3. Czy wiersze są zablokowane w kolejności w instrukcji SELECT ... ORDER BY ... FOR UPDATE?

  4. Jak podzielić wiersz na wiele wierszy w postgresql

  5. Jak wyświetlić funkcję, procedurę, kod źródłowy wyzwalaczy w postgresql?