PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Запазване на часовата зона в PostgreSQL timestamptz тип

Както вече разбрахте сами, часовата зона не се записва изобщо с типовете дата/час в Postgres, дори с timestamptz . Ролята му е просто модификатор на входа или съответно декоратор на изхода. Запазва се само стойността (момента във времето). Достатъчни подробности в този свързан отговор:

  • Изцяло игнориране на часовите зони в Rails и PostgreSQL

Следователно, ако искате да запазите тази част от входния низ, трябва да я извлечете от низа и да я запишете сами. Бих използвал таблица като:

CREATE TABLE tstz
 ...
 , ts timestamp    -- without time zone
 , tz text
)

tz , като text , може да съдържа числово отместване както и съкращение за часова зона , или име на часова зона .

Трудността е да се извлече частта от часовата зона според всички различни правила, които анализаторът следва и по начин, който няма да се счупи лесно. Вместо да приготвяте своя собствена процедура,накарайте анализатора да свърши работата . Помислете за тази демонстрация:

WITH ts_literals (tstz) AS (
   VALUES ('2013-11-28 23:09:11.761166+03'::text)
         ,('2013-11-28 23:09:11.761166 CET')
         ,('2013-11-28 23:09:11.761166 America/New_York')
   )
SELECT tstz
      ,tstz::timestamp AS ts
      ,right(tstz, -1 * length(tstz::timestamp::text)) AS tz
FROM   ts_literals;

SQL Fiddle.

Работи със или без T между дата и час. Ключовата логика е тук:

right(tstz, -1 * length(tstz::timestamp::text)) AS tz

Вземете това, което е останало от низ от времеви печат, след отрязване на дължината на това, което анализаторът идентифицира като компонент дата/час. Това разчита на въвеждането, както казахте:

валидирани низове по ISO8601



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на максимума от вашите PostgreSQL индекси

  2. Променете колоните на PostgreSQL, използвани в изгледите

  3. Тестване на функции на PostgreSQL, които консумират и връщат рекурсора

  4. Грешка при отпадане на Rails + Postgres:базата данни е достъпна от други потребители

  5. Psycopg2, Postgresql, Python:Най-бързият начин за групово вмъкване