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

标签 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();

最佳答案

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/

相关文章:

ruby - 这个 Ruby PSQL 是安全的吗?

sql - 来自 csv 文件的 PostgreSQL 查询

Postgresql:在数字开始之前提取文本

java - 为什么在更改 Android 中的区域时 DateTimeZone.getDefault() 不会更新

mysql - 在 MySQL 中将日期存储为 unix 时间戳或 TIMESTAMP 数据类型?

php - 您如何使用时间戳列计算每天的不同值?

PostgreSQL:将两个时间戳设置为彼此相等。其中之一有与之关联的触发器

c# - 时区查找

python - 如何在 Python 日志记录中设置 GMT/UTC 时间戳?

time - 如何在 Kotlin 中获取当前时间作为时间戳?