postgresql 延迟或等待声明

zlwx9yxi  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(5)|浏览(351)

我有一个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;

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

j0pj023g

j0pj023g1#

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

是,pg_睡眠:

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

(1 row)
2mbi3lxu

2mbi3lxu2#

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

PERFORM pg_sleep(10);
liwlm1x9

liwlm1x93#

据我所知没有。
你可以在shell中做一些事情,通过一个简单的脚本将你的SQL传输到PostgreSQL中。

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

kt06eoxx

kt06eoxx4#

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

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

ep6jt1vc5#

根据延迟执行,可以使用pg_sleep()pg_sleep_for()延迟10秒,如下所示:

SELECT pg_sleep(10);
SELECT pg_sleep_for('10 seconds');
SELECT pg_sleep_for('10 second');

此外,您还可以使用pg_sleep_until()延迟一段时间,如下所示:
一个三个三个一个

相关问题