PostgreSQL: Исправление ошибки duplicate key value violates unique constraint "pages_pkey" дублирования ключей в PostgreSQL после восстановления из резервной копии
Наверняка вы тоже сталкивались с ситуацией когда после восстанавления базы данных 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 $$;
Вот и всё, надеюсь раз вы здесь, что это не произошло с вашей продакшен базой =)