本省没有好像create or replace function sleep (integer) returns time as ' declare seconds alias for $1; later time; thetime time; begin thetime := timeofday()::timestamp; later := thetime + (seconds::text || '' seconds'')::interval; loop if thetime >= later then exit; else thetime := timeofday()::timestamp; end if; end loop;return later; end; ' language plpgsql;
declare
seconds alias for $1;
later time;
thetime time;
begin
thetime := timeofday()::timestamp;
later := thetime + (seconds::text || '' seconds'')::interval;
loop
if thetime >= later then
exit;
else
thetime := timeofday()::timestamp;
end if;
end loop;return later;
end;
' language plpgsql;
t_girl=# \timing
Timing is on.
t_girl=# select sleep(10);
sleep
-----------------
14:56:59.764049
(1 row)Time: 10000.742 ms
t_girl=#
pg_sleep
----------
(1 row)Time: 5000.962 ms
t_girl=#
下面的这个函数可以用于让服务器进程延时执行:pg_sleep(seconds)pg_sleep 让当前的会话进程休眠 seconds 秒以后再执行。seconds 是一个 double precision 类型的值,所以可以指定带小数的秒数。例如:SELECT pg_sleep(1.5);【注意】有效的休眠时间间隔精度是平台相关的,通常 0.01 秒是通用的。休眠的时间将至少等于指定的时间,也有可能由于服务器荷载较重等原因而比指定的时间长。警告
请确保调用 pg_sleep 的会话没有持有不必要的锁。否则其它会话可能必须等待这个休眠的会话释放所持有的锁,从而减慢系统速度。
注意
[1] 如果操作系统实现了润秒,那么上限是 60 。