延迟或等待声明

时间:2009-08-25 22:38:12

标签: postgresql wait sleep

我有一个500,000行的SQL脚本:

update users set region_id = 9814746 where id = 101 and region_id is null;
update users set region_id = 9814731 where id = 102 and region_id is null;
update users set region_id = 3470676 where id = 103 and region_id is null;

我希望每10行插入50秒的延迟。 pgsql是否有waitfor语句,如t-sql

感谢。

4 个答案:

答案 0 :(得分:32)

  

pgsql是否有像t-sql这样的waitfor语句。

是的,pg_sleep

pg=> SELECT pg_sleep(10);
 pg_sleep 
----------

(1 row)

答案 1 :(得分:5)

您可以使用pg_sleep语句调用PERFORM函数,因为我们并不关心返回值:

PERFORM pg_sleep(10);

答案 2 :(得分:0)

据我所知。

你可以在shell中做一些事情,通过一个简单的脚本然后进入PostgreSQL来管理你的SQL。例如。与Perl:

cat regionupdates.sql | perl -e '$i = 1; while(<STDIN>) { $i++; print $_; if ($i % 50 == 0) { sleep 10; } }' | psql -d MYDB -L output.txt
顺便说一句:我看到你之前问了一个非常相似的问题。如果您能接受解决问题的答案,那就太好了:

Begin...commit every 50 rows

答案 3 :(得分:0)

如pilcrow所说,这是最简单的方法。如果您不想看到结果,只需在运行pg_sleep之前关闭显示--

\pset tuples_only on
select pg_sleep(10) ;
\pset tuples_only off