1

我正在开发一个 oracle 到 postgresql 数据库迁移项目。我需要从 postgres 读取操作系统日期和时间。在 oracle 中,sysdate() 以日期类型数据返回系统日期时间,而 systimestamp() 则返回时间戳类型数据,无论 time_zone 变量设置如何。但是在 postgres 中 current_date() 和 current_timestamp() 总是给出相对于为该数据库设置的时区变量的结果。同步时区变量(即设置时区='utc')是一种方法,但我不希望我的时区变量被更改。

我想要得到的是我系统的当前日期和时间(时区可能包括或不包括),就像在 oracle 中一样。任何 pl/pgsql 都会有所帮助。谢谢

4

1 回答 1

1

Oracle 和 PostgreSQL 中的数据类型TIMESTAMP WITH TIME ZONE不同。
Oracle 将时间戳信息与时间戳一起存储,而 PostgreSQL 将时间戳存储在 UTC 中,并以当前设置的时区显示(可通过 SQL 语句获得SHOW TimeZone)。

因此,函数在 PostgreSQL 和 Oracle 中返回相同的时间,但以不同的方式显示。这通常应该没有问题。

如果您确实需要将时区信息与时间戳一起存储,则必须使用单独的字段来存储时区信息。然后,您可以使用AT TIME ZONE将时间戳转换为该时区以进行显示。

于 2016-08-03T13:57:54.403 回答