Задать вопрос
stuxnetix
@stuxnetix
Новичок в IT

Почему не создается логическая репликация на Windows 10 и падает воркер?

Странная ситуация. Имеется в наличии Postgres 14 и в ней 2 базы данных op_market и op_market_2 , я публикую таблицы из op_market_2 , штатной командой (как пример) :
CREATE PUBLICATION im_pub FOR TABLE link_accessories,categories;

И в базе op_market создаю подписку im_sub с такими параметрами :
CREATE SUBSCRIPTION im_sub 
CONNECTION 'dbname=op_market_2 host=localhost port=5432 user=postgres password=postgres' 
PUBLICATION im_pub


И тут начинается самое интересное , я создавал подписку как через терминал напрямую , так и через Navicat , процесс тупо зависает на очень долгое время и все. Сама база небольшая на 650мб , пару миллионов записей , но суть не в этом.
При проверке на слот , вижу что слот создался , а подписка нет в логах тишина. Дедлок ?

Единственный способ который работает - если в базе издателя создать слот вручную :
SELECT pg_create_logical_replication_slot('im_sub', 'pgoutput');


И после этого создать подписку с такими параметрами дополнительно к основному запросу подписки :
WITH (copy_data = true, create_slot = false);
Тогда запускается все сразу. Почему банальное создание не срабатывает и зависает ?

Это полбеды , я почему создал тему , это наблюдения с моего компьютера. А сама задача появилась , шеф попросил ему сделать тоже самое на его компьютере , у него 13 версия Postgres и еще пару тестовых баз имеется помимо этих , но репликаций там нет , только вот эти - но конкретно у него , никакой вариант не работает , тупо падает воркер репликации : Фоновый процесс "logical replication worker" (PID 10120) завершился с кодом выхода 1

Перепробовал все что можно , публикации с подпиской раз 50 пересоздавал , очищал таблицы на подписчике , даже создавал тестовые такие же 2 базы с продакшена где все работает , ничего не помогает , логи вовсю пишут что падает воркер , однако в базе нет нет данные пополняются.. не сразу , но бывает проскочат. Шеф не хочет там ничего пересоздавать и другую версию ставить , в этом и проблема. Полдня убил , проблему не решил , уже себе даже 13ю накатил параллельно 14й , дал другой порт , накатил те же базы и с первого раза все залетело , правда как я уже и говорил с отдельным созданием слота , а потом подписка.

Кто сталкивался , можете посоветовать куда копать и что проверить еще , что еще этой базе надо? Почему падает этот воркер у шефа? Может еще параметры какие?

PS : У меня все работает вообще на дефолтном конфиге! только стоит репликация как logical и все.
  • Вопрос задан
  • 350 просмотров
Подписаться 5 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Merion Academy
    Администрирование MS Windows Server
    1 месяц
    Далее
  • Нетология
    Инженер по автоматизации
    13 месяцев
    Далее
  • Skillbox
    Системный администратор с нуля
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
DBA для вашего PostgreSQL?
Почему банальное создание не срабатывает и зависает ?

Потому что известное задокументированное ограничение имеющейся реализации.
https://www.postgresql.org/docs/14/sql-createsubsc...
Creating a subscription that connects to the same database cluster (for example, to replicate between databases in the same cluster or to replicate within the same database) will only succeed if the replication slot is not created as part of the same command. Otherwise, the CREATE SUBSCRIPTION call will hang. To make this work, create the replication slot separately (using the function pg_create_logical_replication_slot with the plugin name pgoutput) and create the subscription using the parameter create_slot = false. This is an implementation restriction that might be lifted in a future release.

Как можно заметить, актуально и для pg18. Мешает? Напишите патч. Пока что, очевидно, никому не мешает в достаточной степени чтобы заняться исправлением. Подписка из одной базы в другую в пределах одного и того же кластера штука довольно редкая.

Кто сталкивался , можете посоветовать куда копать и что проверить еще , что еще этой базе надо? Почему падает этот воркер у шефа?

Нужны остальные логи (и с подписчика и с публикации).
Можно начать с проверки, что там в конфиге было изменено. Может логирование ограничено.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы