延迟或等待声明

发布于 2024-08-03 11:26:35 字数 455 浏览 5 评论 0原文

我有一个 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 是否有类似于 t-sqlwaitfor 语句。

谢谢。

I have a 500,000 line SQL script:

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;

I want to INSERT a delay of 10 seconds every 50 lines. Does pgsql have a waitfor statement like t-sql.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

春风十里 2024-08-10 11:26:35

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

是的,pg_sleep

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

(1 row)

Does pgsql have a waitfor statement like t-sql.

Yes, pg_sleep:

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

(1 row)
魂牵梦绕锁你心扉 2024-08-10 11:26:35

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

PERFORM pg_sleep(10);

You could call the pg_sleep function with the PERFORM statement since we don't care about returning values:

PERFORM pg_sleep(10);
绅刃 2024-08-10 11:26:35

您可以使用 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() 延迟执行一段时间,如下所示如下图所示:

SELECT pg_sleep_until('today 21:45');
SELECT pg_sleep_until('tomorrow 03:00');

You can use pg_sleep() and pg_sleep_for() to delay 10 seconds as shown below according to Delaying Execution:

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

In addition, you can use pg_sleep_until() to delay until some time as shown below:

SELECT pg_sleep_until('today 21:45');
SELECT pg_sleep_until('tomorrow 03:00');
欲拥i 2024-08-10 11:26:35

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

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

As pilcrow says that is the easiest way. If you do not want to see the results back, just turn off display before running pg_sleep like this -->

\pset tuples_only on
select pg_sleep(10) ;
\pset tuples_only off
美煞众生 2024-08-10 11:26:35

据我所知。

您可以在 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 行

Not to my knowledge.

You could do something in the shell, piping your SQL through a simple script and then into PostgreSQL. E.g. with Perl:

cat regionupdates.sql | perl -e '$i = 1; while(<STDIN>) { $i++; print $_; if ($i % 50 == 0) { sleep 10; } }' | psql -d MYDB -L output.txt

BTW: I see you asked a very similar question before. It would be nice if you could accept the answers you found solved your problem:

Begin...commit every 50 rows

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文