xom`s pinion - Tom Hnatovsky Blog
Aktualizace všech sekvencí v PostgreSQL
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.