2011-07-04 13 views
12

Tengo un script que copia datos de la tabla de una base de datos a otra, sin embargo, la columna ID está respaldado por una secuencia de modo que cuando se inserta un nuevo registro en la tabla de destino del nextval(seq) está devolviendo el valor equivocado.reinicio para que nextval es el siguiente ID no utilizado

es necesario que actualice la secuencia para que se inicie en la siguiente ID disponible.

quiero hacer algo como:

ALTER SEQUENCE seq_id RESTART WITH 
    (SELECT MAX(id) FROM tbl); 

Lo anterior produce un error de sintaxis sin embargo.

¿Puede alguien sugerir un enfoque alternativo?

Respuesta

9
DO $$ 
    SELECT INTO m MAX(id) FROM tbl; 
    EXECUTE 'ALTER SEQUENCE seq_id RESTART WITH ' || m; 
END$$; 

o, mejor aún, ver a esta pregunta:

+0

gracias por la respuesta, me estoy quedando esto como un eco canaliza en psql .. me puede decir cómo escapar todo el comando en uno? – pstanton

+0

puede utilizar la función de 'setval' en lugar de tener que construir dinámicamente una' ALTER sequence'; más simple, pero no hace ninguna diferencia real si estás haciendo esto uno por uno. – araqnid

Cuestiones relacionadas