在PostgreSQL中设置timestamp列的时区

时间:2014-08-21 21:40:38

标签: postgresql timezone timestamp

我在PostgreSQL表上有一个更新时间戳字段的触发器,但我希望在正确的时区得到它。如何将我的专栏设置为始终位于' PST'默认情况下?这是我的触发器:

ALTER TABLE coastal ADD latest_report TIMESTAMP;

ALTER TABLE coastal ALTER COLUMN latest_report 
SET DEFAULT CURRENT_TIMESTAMP;

UPDATE coastal SET latest_report=CURRENT_TIMESTAMP;

CREATE OR REPLACE FUNCTION coastal_latest_report()
  RETURNS TRIGGER AS '
BEGIN
   NEW.latest_report = NOW();
   RETURN NEW;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER coastal_latest_report_modtime BEFORE UPDATE
  ON coastal FOR EACH ROW EXECUTE PROCEDURE
  coastal_latest_report();

1 个答案:

答案 0 :(得分:4)

  

如何将我的专栏设置为始终位于' PST'默认情况下?

这是不可能的/误解。时间戳列不在任何时区中。永远不会保存时区,即使timestamp with time zonetimestamptz)也不会保存,这始终可以节省UTC时间。那个名称有点误导,我会给你那个。

您有两个非常简单的选择:

  • now()保存到timestamptz列。
  • now()保存到timestamp列。 (演员表中的时区偏移截断。)

如果您希望时间戳 显示 ,那么' PST'时区,将会话的时区设置设置为该时区(如果尚未设置)。例如:

SET timezone='America/Anchorage'

这个相关答案的详细信息:

要查找您的时区名称:

如果要保存输入值的原始时区: