Solución de errores de clave duplicada en PostgreSQL después de una restauración de respaldo
¡Hola a todos! ¿Alguna vez han restaurado una base de datos PostgreSQL desde una copia de seguridad solo para encontrarse con el frustrante error "duplicate key value violates unique constraint" al intentar insertar nuevos registros?
Sí, es un fastidio. El problema generalmente se debe a que las secuencias de auto-incremento no se actualizan correctamente durante la restauración. Pero no se preocupen, tengo un script genial que revisará cada tabla y configurará los valores correctos de auto-incremento, para que puedan volver al trabajo sin volverse locos.
Solo ejecuten esta query:
DO $$
DECLARE
rec RECORD;
seq_name TEXT;
max_id BIGINT;
BEGIN
FOR rec IN
SELECT
table_name,
column_name,
column_default
FROM
information_schema.columns
WHERE
column_default LIKE 'nextval%'
LOOP
seq_name := regexp_replace(rec.column_default, 'nextval\(''(.*)''::regclass\)', '\1');
EXECUTE format('SELECT COALESCE(MAX(%I), 0) + 1 FROM %I', rec.column_name, rec.table_name) INTO max_id;
EXECUTE format('SELECT setval(''%s'', %s, false)', seq_name, max_id);
END LOOP;
END $$;
¡Y ahí lo tienen! Con este práctico script, pueden actualizar las secuencias de auto-incremento después de restaurar su base de datos PostgreSQL.