Помилка duplicate key value violates unique constraint при реплікації даних з операційної у аналітичну базу даних
Відтворення помилки:
-
Зробити зміну структури таблиці в моделі даних, наприклад додати колонку. При цьому таблиця повинна вже містити дані у БД;
-
Розгорнути зміну;
-
Після розгортання реплікація з аналітичною базою перестає працювати. У лош файлах аналітичної бази можна побачити наступну помилку для історичної
_hst
таблиці тієї таблиці в якій була змінена структура.Приклад відповіді:
2024-09-26 13:45:32.264 UTC [8319] LOG: logical replication table synchronization worker for subscription "operational_sub", table "entity_build_acts_hst" has started 2024-09-26 13:45:32.440 UTC [8319] ERROR: duplicate key value violates unique constraint "ui_entity_build_acts_hst" 2024-09-26 13:45:32.440 UTC [8319] DETAIL: Key (entity_id, ddm_created_at)=(200b478f-326e-4a3b-804e-782e907ecbb8, 2024-09-12 18:42:05.289627+00) already exists.
Рішення:
-
Після розгортання регламенту та появи помилок увійти у базу даних registry на под аналітичної бази даних та видалити всі дані з історичної
_hst
(приклад з лог файлів - entity_build_acts_hst) таблиці яка вказана в помилці:psql \c registry DELETE FROM entity_build_acts_hst;
-
Помилки зникнуть та почнеться реплікація;
-
Через деякий час в таблиці з якої видалили дані, вони знову зʼявляться.
Причини:
При зміні структури таблиці на операційній та аналітичній базах даних, наявна hst
таблиця перейменовуються та переноситься в схему архів. Потім створюється нова hst
таблиця зі зміненою структурою. В ній копіюються останні історичні дані із таблиці перенесеної в архів. В решті решт вмикається реплікація новоствореної hst
таблиці. Оскільки дані були вже скопійовані на аналітичній базі даних та реплікація намагається зробити те ж саме с тими ж самими даними виникає конфлікт.