Перестворення реплікації в аналітичну базу даних

Загальна рекомендація - подивитись причину непрацездатності реплікації, бо процес відновлення, який буде описаний нижче, не гарантує відновлення з усіма видами помилок.

  1. Виконується на под аналітичної репліки в базі registry. Щоб приєднавшись до бази даних:

    psql
    \c registry
  2. Скрипт для перестворення:

    ALTER SUBSCRIPTION operational_sub DISABLE;
    select subconninfo from pg_subscription where subname = 'operational_sub'\gset
    SELECT 'TRUNCATE' ||' '||srrelid::regclass ||' '||'CASCADE' FROM pg_subscription_rel\gexec
    DROP SUBSCRIPTION operational_sub;
    SELECT pg_sleep(10);
    CREATE SUBSCRIPTION operational_sub CONNECTION :'subconninfo' PUBLICATION analytical_pub WITH(create_slot=false,slot_name=operational_sub);
  3. Опціонально. Ручні покрокові дії:

    1) Зупиняємо subscription: ALTER SUBSCRIPTION operational_sub DISABLE;

    2) Виконуємо TRUNCATE всіх таблиць користувачів, які входять в subscription: SELECT 'TRUNCATE' ||' '||srrelid::regclass ||' '||'CASCADE' FROM pg_subscription_rel\gexec

    3) Видаляємо subscription: DROP SUBSCRIPTION operational_sub; SELECT pg_sleep(10); - затримка в 10 сек необхідна, щоб postgres operator встиг створити слот для реплікації на операційному кластері.

    4) Створюємо subscription: CREATE SUBSCRIPTION operational_sub CONNECTION 'dbname=registry host=operational-primary user=postgres password=<Пароль із secret operational-pguser-postgres> port=5432' PUBLICATION analytical_pub WITH(create_slot=false,slot_name=operational_sub);

Це видалить всі дані з аналітичної бази даних та зробить синхронізацію з нуля з операційної бази даних.