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.