Я использую Posgtresql 10.
Я хочу реплицировать 2 таблицы из базы данных «db» в те же две таблицы с одинаковыми столбцами в базе данных «назначения».
изменил значение wal_level на логическое в postgresql.conf и max_replication_slots на 10
нет брандмауэра
Я создал публикацию в базе данных "db"
ALTER ROLE my_user WITH REPLICATION LOGIN PASSWORD 'my_password';
CREATE PUBLICATION my_publication;
ALTER PUBLICATION my_publication ADD TABLE table1;
ALTER PUBLICATION my_publication ADD TABLE table2;
Я создал подписку в "назначении" базы данных со слотом, потому что я хочу реплицировать на том же сервере:
SELECT pg_create_logical_replication_slot('test_slot_v1', 'pgoutput');
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=localhost port=5432 password=my_password user=my_user dbname=db' PUBLICATION my_publication WITH (slot_name=test_slot_v1, create_slot=false);
alter subscription my_subscription refresh publication ;
Первая репликация работает. Затем, когда я изменяю значение одной записи varchar (не FK), значение не реплицируется, и в журналах postgres появляется следующая ошибка:
2020-04-12 16: 16: 57.886 CEST [720474] LOG: начался процесс применения логической репликации для подписки my_subscription. 2020-04-12 16: 16: 57.888 CEST [720475] ОШИБКА: слот репликации test_slot_v1 "не был создан в этой базе данных 2020-04-12 16: 16: 57.889 CEST [720474] ОШИБКА: не удалось получить данные из потока WAL: ОШИБКА: слот репликации" test_slot_v1 "не был создан в этой базе данных < / strong> 2020-04-12 16: 16: 57.890 CEST [712133] LOG: рабочий процесс: рабочий процесс логической репликации для подписки 245251 (PID 720474), выход с кодом выхода 1
Я уверен, что создал слот в «назначении» базы данных, который содержит подписку.
Любые идеи ? Заранее спасибо.