45

我有一个 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是否pgsqlwaitfor类似的声明t-sql

谢谢。

4

4 回答 4

77

pgsql 是否有类似 t-sql 的 waitfor 语句。

是的,pg_sleep

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

(1 row)
于 2009-08-26T03:42:54.977 回答
22

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

PERFORM pg_sleep(10);
于 2016-06-27T14:09:37.957 回答
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

顺便说一句:我看到你之前问过一个非常相似的问题。如果您能接受您发现解决问题的答案,那就太好了:

开始...每 50 行提交一次

于 2009-08-25T23:26:17.987 回答
0

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

\pset tuples_only on
select pg_sleep(10) ;
\pset tuples_only off
于 2020-03-27T13:57:09.763 回答