2009-08-25 7 views
7

Tengo una secuencia de comandos SQL 500.000 línea:retraso o espera-Declaración

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; 

quiero insertar un retraso de 10 segundos cada 50 líneas. ¿Tiene pgsql una declaración de espera como t-sql?

Gracias.

Respuesta

17

¿Se pgsql tiene declaración waitfor como T-SQL.

Sí, pg_sleep:

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

(1 row) 
0

Que yo sepa.

Podría hacer algo en el shell, canalizando su SQL a través de un script simple y luego en PostgreSQL. P.ej. con 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: Veo que hace una pregunta muy similar antes. Sería bueno si pudiera aceptar las respuestas que encontraron solucionado su problema:

Begin...commit every 50 rows

+0

Incluí el gato como el el origen del SQL puede no ser un archivo, sino que puede ser generado por otro programa o script de shell, por lo que la estructura del comando podría modificarse fácilmente. Pero considero su punto en general. –

+0

Hmm, no estoy seguro de por qué tiene el voto popular - usos estilísticos del gato a un lado. ;-) Si tuviera un voto ascendente cada vez que filté las declaraciones de SQL a través de perl/awk/you-name-it para obtener el comportamiento que deseaba, sería Jon Skeet. +1 – pilcrow

1

Se podría llamar a la función pg_sleep con la declaración PERFORM ya que no se preocupan por los valores que regresan:

PERFORM pg_sleep(10); 
+1

Gracias. Es trabajo para mi –

+0

error de sintaxis para mí – dannymo