Главная/Статьи/PostgreSQL: Исправление ошибки duplicate key value violates unique constraint
PostgreSQL

PostgreSQL: Исправление ошибки duplicate key value violates unique constraint

Наверняка вы тоже сталкивались с ситуацией когда после восстанавления базы данных PostgreSQL из резервной копии, натыкались на ошибку duplicate key value violates unique constraint, когда пытаетесь вставить новые записи?

Проблема обычно заключается в том, что автоинкрементные последовательности не обновляются правильно во время восстановления.

Делюсь классным скриптом, который проверит каждую таблицу и установит правильные значения автоинкремента.

Просто выполните этот запрос:

DO $$
DECLARE
    rec RECORD;
    seq_name TEXT;
    max_id BIGINT;
BEGIN
    FOR rec IN
        SELECT
            table_name,
            column_name,
            column_default
        FROM
            information_schema.columns
        WHERE
            column_default LIKE 'nextval%'
    LOOP
        seq_name := regexp_replace(rec.column_default, 'nextval\\(''(.*)''::regclass\\)', '\\1');
        EXECUTE format('SELECT COALESCE(MAX(%I), 0) + 1 FROM %I', rec.column_name, rec.table_name) INTO max_id;
        EXECUTE format('SELECT setval(''%s'', %s, false)', seq_name, max_id);
    END LOOP;
END $$;

Вот и всё, надеюсь раз вы здесь, что это не произошло с вашей продакшен базой =)