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

PostgreSQL/JDBC i TIMESTAMP vs. TIMESTAMPTZ

Zazwyczaj używaj TIMESTAMPTZ

Oto rada Davida E. Wheelera, eksperta Postgres, w poście na blogu, którego tytuł mówi wszystko:
Zawsze używaj TIMESTAMP ZE STREFĄ CZASOWĄ (TIMESTAMPTZ)

Jeśli śledzisz rzeczywiste momenty, określone punkty na osi czasu, użyj TIMESTAMP WITH TIME ZONE .

Jeden wyjątek:partycjonowanie

Jedynym wyjątkiem Wheeler jest partycjonowanie według znaczników czasu ze względu na ograniczenia techniczne. rzadki wyjątek dla większości z nas.

Aby uzyskać informacje na temat partycjonowania, zobacz doc i zobacz Wiki .

Błędna

Nazwy typów danych timestamp with time zone i timestamp without time zone są mylące. W obu przypadki, że wartość daty i godziny jest przechowywana w UTC (bez przesunięcia strefy czasowej). Przeczytaj to poprzednie zdanie jeszcze raz. UTC, zawsze. Fraza „ze strefą czasową” oznacza „ze zwróceniem uwagi na strefę czasową”, a nie „przechowywanie strefy czasowej obok tej wartości”. Różnica między typami polega na tym, czy dowolna strefa czasowa powinna być stosowana podczas przechowywania (INSERT lub UPDATE) lub pobierania (zapytanie SELECT). (To zachowanie zostało opisane dla Postgresa — inne bazy danych bardzo się różnią w związku z tym.)

Dokładniej, należy powiedzieć, że TIMESTAMP WITH TIME ZONE przechowuje wartości daty i czasu bez strefy czasowej. Ale bez odniesienia do ram czasowych każdy, kto patrzy na te dane, musiałby założyć (mam nadzieję, módlcie się?), że wartości są UTC. Ale znowu, dyskutuj, ponieważ prawie nigdy nie powinieneś używać tego typu.

Przeczytaj dokument ostrożnie i trochę poeksperymentuj, aby wyjaśnić swoje zrozumienie.

Bez strefy

Jeśli chcesz zapisać ogólną ideę możliwego czasu, a nie konkretny moment, użyj innego typu, TIMESTAMP WITHOUT TIME ZONE .

Na przykład Boże Narodzenie zaczyna się w tym roku w pierwszym momencie 25 grudnia 2017 r. Będzie to 2017-12-25T 00:00:00 bez wskaźnika strefy czasowej ani przesunięcia od czasu UTC. Ta wartość to tylko mgliste wyobrażenie o możliwych momentach. Nie ma to znaczenia, dopóki nie zastosujemy strefy czasowej (lub przesunięcia). Więc przechowujemy to za pomocą TIMESTAMP WITHOUT TIME ZONE .

Elfy obsługują Dział Logistyki Imprez Specjalnych Świętego Mikołaja stosować strefy czasowe w ramach procesu planowania. Najwcześniejsza strefa czasowa to obecnie Pacific/Kiribati , 14 godzin przed UTC. Elfy planują pierwsze przybycie Świętego Mikołaja. Elfy planują plan lotu, który przenosi renifery do innych stref czasowych, w których niedługo potem nadchodzi północ, takich jak Pacific/Auckland . Kontynuują wędrówkę na zachód, gdy nadchodzi północ w każdej strefie. Kilka godzin później w Asia/Kolkata , jeszcze później w Europe/Paris , jeszcze więcej godzin później w America/Montreal i tak dalej.

Każdy z tych konkretnych momentów dostawy byłby rejestrowany przez elfy za pomocą WITH TIME ZONE , podczas gdy ta ogólna idea Bożego Narodzenia byłaby przechowywana jako WITHOUT TIME ZONE .

Inne zastosowanie w aplikacjach biznesowych dla WITHOUT TIME ZONE umawia się na spotkania dalej niż kilka tygodni. Politycy na całym świecie mają niewytłumaczalne upodobanie do majstrowania przy zegarze i redefiniowania zasad stref czasowych. Dołączają do czasu letniego (DST), opuszczają czas letni, rozpoczynają czas letni w innym dniu lub kończą czas letni w innym dniu lub przesuwają swoje zegary o 15 minut lub pół godziny. Wszystko to zostało zrobione w ciągu ostatnich kilku lat przez Turcję, Stany Zjednoczone, Rosję, Wenezuelę i inne.

Politycy często dokonują tych zmian bez ostrzeżenia. Więc jeśli planujesz wizytę u dentysty na sześć miesięcy przed godziną 13:00, prawdopodobnie powinna ona zostać zapisana jako TIMESTAMP WITHOUT TIME ZONE w przeciwnym razie politycy mogą skutecznie zmienić twoje spotkanie na południe lub 14:00 lub 13:30.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jednoczesny proces wstawiania danych do bazy danych

  2. Jak w PostgreSQL wstawić dane za pomocą polecenia COPY?

  3. RDS do S3 bezpośrednio za pomocą pg_dump (bez pośredników)

  4. PHP PDO Postgres a typ kolumny Sqlite dla count(*)

  5. Usuń duplikaty w postgresie