Задержка или ожидание заявления - PullRequest
17 голосов
/ 26 августа 2009

У меня есть SQL-скрипт на 500 000 строк:

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.

Спасибо.

Ответы [ 3 ]

33 голосов
/ 26 августа 2009

Есть ли в pgsql оператор waitfor, например t-sql.

Да, pg_sleep :

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

(1 row)
6 голосов
/ 27 июня 2016

Вы можете вызвать функцию pg_sleep с помощью оператора PERFORM, так как нам не нужно возвращать значения:

PERFORM pg_sleep(10);
0 голосов
/ 26 августа 2009

Мне не известно.

Вы могли бы что-то сделать в оболочке, передавая ваш 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 строк

...