我在 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();
如何将我的列默认设置为始终处于“PST”?
这是不可能的/一个误解。时间戳列不在any时区。时区永远不会保存,即使是timestamp with time zone
(timestamptz
),始终保存 UTC 时间。那name有点误导,我会给你的。
您有两个非常简单的选择:
- Save
now()
to a timestamptz
column.
- Save
now()
to a timestamp
柱子。 (时区偏移量为被截断的在演员阵容中。)
如果你想要时间戳显示的对于“PST”时区,将会话的时区设置设置为该时区(如果尚未设置)。例如:
SET timezone='America/Anchorage'
此相关答案中的详细信息:
- 在 Rails 和 PostgreSQL 中完全忽略时区
要查找您的时区名称:
- 在 Django/PostgreSQL 中设置自定义时区(印度标准时间)
如果要保存输入值的原始时区:
- 保留 PostgreSQL timestamptz 类型的时区
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)