--исправление значений последовательностей для каждой таблицы --текущее значение должно соответствовать макс. id CREATE OR REPLACE FUNCTION repairseq(in tablename text) RETURNS int AS $$ DECLARE seqname text; maxid int; flag text; res int; BEGIN --получаем название последовательности для таблицы tablename seqname := tablename || '_id_seq'; --получаем макс. значение ключевого поля EXECUTE 'SELECT max(id) FROM ' || tablename INTO maxid; --если таблица пустая тогда указываем, что следующий nextval --вернет значение maxid, иначе maxid + 1 IF maxid IS NULL THEN maxid := 1; flag := 'false'; ELSE flag := 'true'; END IF; --устанавливаем это значение как текущее значение счетчика EXECUTE 'SELECT setval(''' || seqname || ''', ' || maxid || ', ' || flag || ')' INTO res; RETURN res; END; $$ LANGUAGE plpgsql; SELECT repairseq('reg_applications'); SELECT repairseq('reg_applicationtypes'); SELECT repairseq('reg_applservices'); SELECT repairseq('reg_attachments'); SELECT repairseq('reg_attachmenttypes'); SELECT repairseq('reg_contracts'); SELECT repairseq('reg_countries'); SELECT repairseq('reg_districts'); SELECT repairseq('reg_dkz'); SELECT repairseq('reg_documenttypes'); SELECT repairseq('reg_employees'); SELECT repairseq('reg_groups'); SELECT repairseq('reg_passports'); SELECT repairseq('reg_persons'); SELECT repairseq('reg_regions'); SELECT repairseq('reg_rights'); SELECT repairseq('reg_services'); SELECT repairseq('reg_settings'); SELECT repairseq('reg_settlements'); SELECT repairseq('reg_statuses'); SELECT repairseq('reg_streets'); SELECT repairseq('reg_log'); DROP FUNCTION repairseq(text);