PostgreSQL中是否有类似于Oracle的systimestamp()函数的等效函数?

3
我正在进行一个Oracle到PostgreSQL数据库迁移项目。我需要从Postgres中读取操作系统的日期和时间。在Oracle中,sysdate()返回日期类型数据的系统日期时间,而systimestamp()返回时间戳类型数据,无论time_zone变量设置为何值。但是,在PostgreSQL中,current_date()和current_timestamp()始终相对于该数据库设置的时区变量给出结果。
同步时区变量(即设置timezone='utc')是一种方法,但我不想改变我的时区变量。我只想像在Oracle中那样获取当前系统的日期和时间(时区可能包括或不包括)。任何pl/pgsql都将有所帮助。谢谢。

2
https://www.postgresql.org/docs/9.5/static/functions-datetime.html 任选...顺便提一句:这些时间戳不是在当前时区,所有的时间戳都是在UTC上,但附加了tz。因此这可能不是一个显示/日期格式化问题。 - wildplasser
在PostgreSQL中,set local time zone local是最接近的设置方法 -- 这将设置服务器默认时区的值;如果没有在任何地方明确设置过,则为服务器操作系统默认的时区 -- 此外,在提交/回滚之后,或者如果您在函数中使用它,则会被重置。在函数执行后也会被重置。 - pozs
1个回答

1
数据类型TIMESTAMP WITH TIME ZONE在Oracle和PostgreSQL中是不同的。虽然Oracle将时间戳信息与时间戳一起存储,但PostgreSQL将时间戳存储在UTC中,并在当前设置的时区中显示它(可通过SQL语句SHOW TimeZone获得)。
因此,在PostgreSQL和Oracle中,函数返回相同的时间,但以不同的方式显示。这通常不应该成为问题。
如果您确实需要将时区信息与时间戳一起存储,您将需要使用单独的字段来存储时区信息。然后,您可以使用AT TIME ZONE将时间戳转换为该时区以进行显示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接