我想看看回圈迭代在 postgres 中的 DO 塊內需要多長時間。基本布局如下:
DO $$
declare v_time timestamptz;
declare i record;
begin
for i in select generate_series(1, 5) t
loop
select current_timestamp into v_time;
perform pg_sleep(i.t);
-- something done here (pg_sleep to ensure some time passes)
raise notice '%', v_time - (select current_timestamp);
-- expect negative interval from RAISE.
end loop;
end; $$;
但是,當我運行它時(在 Postgres 13 和 9 上嘗試過),我得到了一個 0S 的回傳間隔:
NOTICE: 00:00:00
NOTICE: 00:00:00
NOTICE: 00:00:00
NOTICE: 00:00:00
NOTICE: 00:00:00
DO
Query returned successfully in 15 secs 389 msec.
我以前做過這個,以前從未遇到過這個問題,所以我想我的問題是“這次我做錯了什么?” 而不是“為什么 postgres 表現出乎意料?”
uj5u.com熱心網友回復:
current_timestamp被定義為:
當前交易的開始時間,它們的值在交易程序中不會改變
您可能想clock_timestamp()改用它回傳一個在事務中更改的值,請參閱上面的鏈接以獲得更完整的描述。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380408.html
