Resetear todas las secuencias de una base postgres resetsequence
Cuando se inserta datos manualmente y nos saltamos las secuencias, al querer insertar un nuevo registro usando la secuencia nos da error de llave duplicada, es por que la secuencia esta desfasada y el valor generado por la esta ya existe en la tabla, en http://pgxn.org Postgres Extension Network se publican extensiones útiles para postgres ahí se encuentra resetsequence, que no es mas que 4 funciones que nos permiten resetear las secuencias de una tabla, de un esquema o de toda la base de datos.
Entiéndase como resetear a la acción de poner el valor máximo del campo que usa la secuencia , en el valor actual de la secuencia, para que siga generando valores únicos.
http://pgxn.org/dist/resetsequence/
La manera de instalar es súper simple, si quieren hacerlo al método postgres por ahí están las instrucciones, pero si no quieren como yo :) simplemente ejecuten el script resetsequence--1.0.0.sql que viene bajándose el archivo zip de la extensión, ahí les creará 4 funciones en el esquema public, de la cuales 3 son las útiles:
#Esta función resetea todas las secuencias de una tabla FUNCTION resetseq_reset_sequences_in_table(regclass)
#Esta función resetea todas las secuencias de un esquema determinado. FUNCTION resetseq_reset_sequences_in_schema(name)
#Esta función resetea todas las secuencias de la base de datos FUNCTION resetseq_reset_sequences_in_database()
Para usarlas lo hacemos como cualquier funcion SQL
SELECT resetseq_reset_sequences_in_table('mitabla');
SELECT resetseq_reset_sequences_in_schema('public');
SELECT resetseq_reset_sequences_in_database()
Si quieren resetear solo una secuencia en particular yo lo hago así:
(No necesitan instalar la extensión para esto)
SELECT setval('nombre_de_la_secuencia', SELECT max(campo_con_secuencia) FROM tabla, false);
Si necesitan poner un valor especifico lo hacemos así:
SELECT setval('nombre_de_la_secuencia', valor, false);
#o así
ALTER SEQUENCE nombre_de_la_secuencia 1;
- Versión para impresión
- Inicie sesión o regístrese para comentar
