2009-08-25 40 views
7

我有50万行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; 

我想插入的每50行10秒的延迟。 pgsql是否有像t-sql这样的waitfor语句。

谢谢。

回答

17

是否pgsql里有一个像T-SQL一个WAITFOR语句。

是,pg_sleep

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

(1 row) 
0

不是我所知。

您可以在shell中执行一些操作,通过一个简单的脚本将SQL传输到PostgreSQL中。例如。与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

+0

我包括猫作为SQL的源代码可能不是一个文件,而是由另一个程序或shell脚本生成的,所以命令的结构可以很容易地改变。 但我总体上表明你的观点。 – 2009-08-26 23:14:59

+0

嗯,不知道为什么你得到downvote - 搁置一只猫的文体用途。 ;-)如果我每次通过perl/awk/you-name过滤SQL语句都得到赞成,那么为了获得我想要的行为,我会成为Jon Skeet。 +1 – pilcrow 2009-08-27 14:40:35

1

你可以调用pg_sleep功能与PERFORM声明,因为我们并不关心返回值:

PERFORM pg_sleep(10); 
+1

谢谢。这对我有用。 – 2016-08-02 04:10:55

+0

语法错误对我来说 – dannymo 2017-08-31 08:17:50