Nella copia di un db, ed in generale quando si manipolano i dati imponendo l’ID è possibile che le ‘sequence’ collegate all’incremento automatico di un dato non siano più impostate corretamente.
È possibile lanciare una funzione che resetta al valore massimo utiizzato.
Suggerisco questo metodo, rubato da stackoverflow_
- aggiungere una funzione nel db chiamata reset_sequence
- eseguire una select che richiama questa funzione
CREATE OR REPLACE FUNCTION “reset_sequence” (tablename text, columnname text) RETURNS “pg_catalog”.”void” AS $body$ DECLARE BEGIN
EXECUTE ‘SELECT setval( pg_get_serial_sequence(‘’’ || tablename || ‘’‘, ‘’’ || columnname || ‘’‘), (SELECT COALESCE(MAX(id)+1,1) FROM ‘ || tablename || ‘), false)’;
END; $body$ LANGUAGE ‘plpgsql’;
select table_name || ‘_’ || column_name , reset_sequence(table_name, column_name) from information_schema.columns where column_default like ‘nextval%’;