在 PostgreSQL 中设置时间戳列的时区

cbu*_*unn 2 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();
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 8

默认情况下,如何将我的列设置为始终位于“PST”中?

这是不可能的/误解。时间戳列不在任何时区。时区永远不会被保存,甚至对于timestamp with time zone( timestamptz)也不保存,它总是保存 UTC 时间。这个名字有点误导,我会告诉你的。

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

  • 保存now()到一timestamptz列。
  • 保存now()到一timestamp列。(时区偏移量在转换中被截断。)

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

SET timezone='America/Anchorage'
Run Code Online (Sandbox Code Playgroud)

此相关答案中的详细信息:

要查找您的时区名称:

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