xom`s pinion - Tom Hnatovsky Blog

Aktualizace všech sekvencí v PostgreSQL

18. prosince 2011 PostgreSQL nekomentováno

PostgreSQL tutoriál Máte v PostgeSQL poslední hodnoty sekvencí, které vám nesedí s daty v tabulkách? Podobnou situaci můžete lehce navodit importním skriptem, který obsahuje hodnoty v polích, která by se měla automaticky plnit dle sekvence..

Jak z takové šlamastiky ven?

SELECT setval('tabulka_sloupec_seq', (SELECT MAX(sloupec) FROM tabulka)+1);

No jo, ale co když je těch tabulek mnoho? V tomto případě oceníte přítomnost plpgsql na serveru a vytvoříte si následující funkci:

CREATE OR REPLACE FUNCTION reset_sequence(table_name text, column_name text, sequence_name text) RETURNS void AS $BODY$DECLARE BEGIN EXECUTE 'SELECT setval( ''' || sequence_name || ''', ' || '(SELECT MAX(' || column_name || ') FROM ' || table_name || ')' || '+1)'; END;$BODY$ LANGUAGE 'plpgsql';

Funkci poté jednoduše spustíte nad všemi tabulkami pomocí příkazu:

select reset_sequence(table_name, column_name, table_name || '_' || column_name || '_seq') from information_schema.columns where column_default like 'nextval%';

Komentovat

Článek zatím nebyl komentován. Podělte se svým názorem.

Pole komentáře: zmenšit / zvětšit

Jméno:

Email: (Gravatar ID)

Web:

Barva trávy (otázka proti robotům):

© 2004-2012 Tom Hnatovsky - Všechna práva vyhrazena