我正在尝试将 IBM DB2 查询重写为 PostgreSQL。
根据 DB2 UDB TO POSTGRESQL CONVERSION GUIDE DB2 函数 CURRENT_TIMESTAMP 可以迁移到 Postgres 函数 CURRENT_TIMESTAMP。我觉得事情没那么简单
PostgreSQL 提供了许多返回与当前日期和时间相关的值的函数。这些 SQL 标准函数都基于当前事务的开始时间返回值
换句话说,如果事务中存在多个将属性值设置为 CURRENT_TIMESTAMP 的插入或更新语句,则该时间戳对于所有行都将完全相同。此行为与 DB2 不同:DB2 在每个语句中使用实际时间戳。
所以我遇到了 Postgres 函数 clock_timestamp() 和 statements_timestamp()。
我认为函数statement_timestamp()是替代DB2中的CURRENT_TIMESTAMP的正确函数。但是,我找不到任何文档可以证实我的假设。我想确保用 statements_timestamp() 替换所有 CURRENT_TIMESTAMP 时没有副作用 - 有人可以确认这一点吗?
摘自手册:
PostgreSQL 还提供了返回开始时间的函数 当前语句,以及当前的实际时间 该函数被调用。
以及 SQL 测试:
BEGIN;
SELECT clock_timestamp();
SELECT pg_sleep(1);
SELECT clock_timestamp();
COMMIT;