Логическая репликация PostgreSQL 13.3 не создает слот репликации в мастере

Я новичок в PostgreSQL. Я пытаюсь создать логическую репликацию двух баз данных, находящихся на одном локальном хосте и одном порту (я не знаю, является ли это частью моей проблемы). Дело в том, что я создаю публикацию без проблем, но в тот момент, когда я создаю подписку, слот репликации, который должен быть создан в мастере, не создается. У меня есть wal_level = logical, но я не знаю, нужна ли мне другая конфигурация в postgres.conf или pg_hba

Еще одна деталь, я не могу создать подписку по коду, Postgres просто не отвечает, как будто застрял тут же, не показывает ни сообщения об ошибке, ни подтверждения. Я могу создать подписку только в pgAdmin 4, но здесь возникает ошибка, что слот репликации не создается.

Любое предложение помощи принимается. И, кстати, извините, если мой английский плохой, надеюсь, я объяснился.


person Humberto Barrera    schedule 05.06.2021    source источник


Ответы (1)


Вы не можете создать подписку из кода, потому что при создании слота репликации (поведение по умолчанию) команда CREATE SUBSCRIPTION не может выполняться внутри блока транзакции.

Теперь при создании подписки, которая подключается к одному и тому же кластеру базы данных (например, для репликации между базами данных в одном кластере или для репликации в одной базе данных), будет выполнено только в том случае, если слот репликации не создан как часть той же команды. В противном случае вызов CREATE SUBSCRIPTION зависнет. Чтобы это работало, создайте слот репликации отдельно (используя функцию pg_create_logical_replication_slot с именем плагина pgoutput) и создайте подписку, используя параметр create_slot = false. Это ограничение реализации, которое может быть снято в будущем выпуске.

см. раздел «Примечания» на странице https://www.postgresql.org/docs/current/sql-createsubscription.html

person Nikhil B    schedule 05.06.2021
comment
Спасибо! Создание слота репликации вручную заставило репликацию работать! - person Humberto Barrera; 05.06.2021
comment
рад помочь :) - person Nikhil B; 05.06.2021