2009-08-25 7 views
7

Ich habe eine 500.000 SQL-Skript Zeile:Verzögerung oder Wait-for-Anweisung

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; 

Ich möchte alle 50 Linien mit einer Verzögerung von 10 Sekunden bis INSERT. Hat pgsql eine waitfor-Anweisung wie t-sql?

Danke.

Antwort

17

Hat pgsql eine waitfor Aussage wie T-SQL haben.

Ja, pg_sleep:

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

(1 row) 
0

Nicht zu meinem Wissen.

Sie könnten etwas in der Shell tun, indem Sie Ihr SQL durch ein einfaches Skript und dann in PostgreSQL leiten. Z.B. mit 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: Ich sehe, dass Sie eine sehr ähnliche Frage zuvor gestellt haben. Es wäre schön, wenn Sie die Antworten annehmen könnten Sie Ihr Problem gelöst gefunden:

Begin...commit every 50 rows

+0

ich die Katze als die darin enthaltene Die SQL-Quelle kann ganz einfach keine Datei sein, sondern von einem anderen Programm oder Shell-Skript generiert werden, so dass die Struktur des Befehls leicht geändert werden kann. Aber ich nehme Ihren Standpunkt im Allgemeinen. –

+0

Hmm, ich bin mir nicht sicher warum du den Downvote hast - stilistische Verwendung der Katze zur Seite. ;-) Wenn ich eine Upvote für jedes Mal hätte, wenn ich SQL-Anweisungen durch perl/awk/you-name-it gefiltert habe, um das gewünschte Verhalten zu erhalten, wäre ich Jon Skeet. +1 – pilcrow

1

Sie konnten die pg_sleep Funktion mit der PERFORM Anweisung aufrufe, da wir über die Rückkehr Wert nicht kümmern:

PERFORM pg_sleep(10); 
+1

Danke. Es ist Arbeit für mich. –

+0

Syntaxfehler für mich – dannymo

Verwandte Themen