Postgresql Ошибка слота репликации postgresql - PullRequest
0 голосов
/ 12 апреля 2020

Я использую Posgtre sql 10.

Я хочу скопировать 2 таблицы из базы данных "db" в те же две таблицы с одинаковыми столбцами в базе данных "destination".

изменено значение 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" не был создан в этой базе данных 2020-04-12 16 : 16: 57.890 CEST [712133] LOG: рабочий процесс: рабочий логической репликации для выхода по подписке 245251 (PID 720474) с кодом выхода 1

Я уверен, что создал слот в базе данных "назначение" ", который держит подписку.

Есть идеи? Заранее спасибо.

1 Ответ

0 голосов
/ 12 апреля 2020

Я отвечу на мой вопрос: Postgresql хочет, чтобы слот создавался в базе данных "db", где я создал свою публикацию, а не в базе данных "destination", где я создал подписку.

Что я сделал: psql \ c целевая выпадающая подписка my_subscription; \ q psql \ c db SELECT pg_create_logical_replication_slot ('test_slot_v1', 'pgoutput'); \ q psql \ c назначение CREATE SUBSCRIPTION my_subscription CONNECTION 'host = localhost port = 5432 пароль = my_password user = my_user dbname = db' PUBLICATION my_publication WITH (slot_name = test_slot_v1, create_slot = false);

*1003* *1004* *1003* *1004* *1003* *1004* Кажется, эта команда не нужна: измените подписку my_subscription refre sh публикация;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...