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

Przekształć znacznik czasu na czas lokalny dla danej strefy czasowej podczas „KOPIUJ .. DO ..”

Przede wszystkim powinieneś użyć timestamptz zamiast timestamp podczas pracy z wieloma strefami czasowymi. Pozwoliłoby to całkowicie uniknąć problemu.

Szczegóły:

możesz użyj AT TIME ZONE konstrukcja taka jak @NuLo sugeruje , może nawet działa, ale nie dokładnie tak, jak opisano.

AT TIME ZONE konwertuje typ timestamp (timestamp without time zone ) na timestamptz (timestamp with time zone ) i wzajemnie. reprezentacja tekstowa timestamp wartość zależy od bieżącego ustawienia strefy czasowej w sesji, w której uruchomiono polecenie. Te dwa timestamptz wartości są w 100% identyczne (oznaczają ten sam punkt w czasie):

'2015-09-02 15:55:00+02'::timestamptz
'2015-09-02 14:55:00+01'::timestamptz

Ale reprezentacja tekstowa nie . Wyświetlacz dotyczy różnych stref czasowych. Jeśli weźmiesz ten literał ciągu i wprowadzisz go do timestamp typ, część strefy czasowej jest po prostu ignorowana i otrzymujesz inne wartości. Dlatego jeśli uruchomisz COPY oświadczenie w sesji z tym samym ustawieniem strefy czasowej, co oryginalny timestamp wartości są dla, sugerowana operacja zdarza się do pracy.

Jednak czystym sposobem jest wygenerowanie poprawnego timestamp wartości na początek, stosując AT TIME ZONE dwa razy :

SELECT event AT TIME ZONE 'my_target_tz' AT TIME ZONE 'my_source_tz', ...
FROM   logtable
ORDER  BY event desc;

'my_target_tz' to "Twoja własna strefa czasowa" i 'my_source_tz' strefa czasowa serwera w chmurze w przykładzie. Aby upewnić się, że czas letni jest przestrzegany, użyj nazw stref czasowych , a nie skróty stref czasowych. Dokumentacja:

Powiązane:

Lub, jeszcze lepiej, użyj timestamptz wszędzie i działa poprawnie automatycznie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks `gin_trgm_ops` Postgresa nie jest używany

  2. znak 0xc286 kodowania UTF-8 nie ma odpowiednika w WIN1252... Przy konwersji z iconv postgres przywraca awarię

  3. Dlaczego moja baza danych Postgres działa przez jakiś czas, a następnie nie jest w stanie uruchomić serwera po ponownym uruchomieniu?

  4. Kolumna PostgreSQL nie istnieje, ale faktycznie istnieje

  5. Czy PostgreSQL może indeksować kolumny tablicy?