2009-08-25 7 views
7
Déclaration

J'ai un script sql 500000 ligne:Retard ou attente-pour

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; 

Je veux insérer un délai de 10 secondes toutes les 50 lignes. Est-ce que pgsql a une instruction waitfor comme t-sql.

Merci.

Répondre

17

Est ont pgsql une déclaration waitfor comme t-sql.

Oui, pg_sleep:

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

(1 row) 
0

Pas à ma connaissance.

Vous pourriez faire quelque chose dans le shell, en redirigeant votre SQL via un simple script, puis dans PostgreSQL. Par exemple. avec 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: Je vois que vous avez posé une question très similaire avant. Ce serait bien si vous pouviez accepter les réponses que vous avez trouvé votre problème résolu:

Begin...commit every 50 rows

+0

J'ai inclus le chat comme La source du SQL peut très bien ne pas être un fichier, mais être générée par un autre programme ou un script shell, donc la structure de la commande pourrait facilement être modifiée. Mais je prends votre point en général. –

+0

Hmm, je ne sais pas pourquoi vous avez obtenu le downvote - utilisations stylistiques de chat de côté. ;-) Si j'avais un upvote à chaque fois que je filtrais les instructions SQL via perl/awk/you-name-it pour obtenir le comportement que je voulais, je serais Jon Skeet. +1 – pilcrow

1

Vous pouvez appeler la fonction pg_sleep avec l'énoncé PERFORM puisque nous ne se soucient pas des valeurs de retour:

PERFORM pg_sleep(10); 
+1

Merci. C'est un travail pour moi. –

+0

erreur de syntaxe pour moi – dannymo

Questions connexes