SERIAL mezőkhöz kapcs. SEQUENCE értékeinek beállítása az összes táblában

Adatbázisokkal kapcsolatos cikkek / PostgreSQL (785 katt)

Egyszer-egyszer előfordul, hogy a címben tárgyalt Sequence értékeit frissíteni kellene.

Ezt a következő függvénnyel lehet gyorsan és az adatbázis összes táblájára vonatkozólag elvégezni:

create function sys_refresh_sequences() returns integer as '
DECLARE
myseq RECORD;
BEGIN
FOR myseq IN select * from sequence_setvals LOOP
RAISE NOTICE ''Executing - %'', myseq.expr;
EXECUTE myseq.expr;
END LOOP;

return 1;
END;
' language 'plpgsql';



A függvény működéséhez a következő View-re is szükség van:

create view sequence_setvals as
select 'SELECT setval(''"'||cs.relname||'"'', max("'||attname||'")) FROM
"'||c.relname||'";' AS expr from pg_class c, pg_class cs, pg_attribute a,
pg_attrdef d where cs.relkind = 'S' and d.adsrc ~ cs.relname and c.oid =
a.attrelid and c.oid = d.adrelid and d.adnum = a.attnum;



Végül a függvény futtatása ;-)

SELECT sys_refresh_sequences();

Előző oldal kutif