我在更新时间戳字段的 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();
最佳答案
How can I set my column to always be in 'PST' by default?
这不可能/误会。时间戳列不在任何 时区。时区永远不会保存,即使是 timestamp with time zone
(timestamptz
),它始终保存 UTC 时间。这个名字有点误导,我会告诉你的。
您有两个非常简单的选择:
- 将
now()
保存到timestamptz
列。 - 将
now()
保存到timestamp
列。 (时区偏移量在转换中被截断。)
如果您希望显示“PST”时区的时间戳,请将 session 的时区设置设置为该时区(如果未设置已经)。例如:
SET timezone='America/Anchorage'
此相关答案中的详细信息:
要查找您的时区名称:
如果要保存输入值的原始时区:
关于postgresql - 在 PostgreSQL 中设置时间戳列的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436402/