You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/pgSQL函数中current_timestamp始终返回相同值的问题求助

问题原因与解决方案

问题根源

PostgreSQL 里的 current_timestamp(包括 now())返回的是事务启动时的时间戳,在整个事务执行过程中其值不会发生改变。你的 PL/pgSQL 块属于一个独立事务,所以哪怕中间有耗时的计数操作或 pg_sleep 延迟,两次调用 current_timestamp 得到的依然是同一个时间。

解决方法

改用 clock_timestamp() 函数,它会返回当前实际的系统时间,每次调用都会获取最新的时间戳。

修改后的脚本:

DO $$
DECLARE
    counter INTEGER;
BEGIN
    RAISE NOTICE '% -- started counting', clock_timestamp();
    SELECT count(*) FROM my_table INTO counter;
    PERFORM pg_sleep(10);
    RAISE NOTICE '% -- % is the counting result', clock_timestamp(), counter;
END;
$$

补充说明

  • current_timestamp/now():属于事务级时间戳,适合需要事务内时间一致的场景(比如记录事务创建时间)
  • clock_timestamp():实时系统时间,适合需要跟踪操作实际执行时间的场景(比如进度日志、耗时统计)

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:40:42