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

Я пытаюсь установить логическую репликацию между двумя облачными экземплярами как с Debian 9, так и с PG 11.1. Команда CREATE PUBLICATION на мастере прошел успешно, но при запуске команды CREATE SUBSCRIPTION на предполагаемой логической реплике команда висит бесконечно.

На главном компьютере я вижу, что слот репликации был создан и активен, и я вижу новый процесс walsender, созданный и "ожидающий", и в журнале на главном сервере я вижу эти строки:

2019-01-14 14:20:39.924 UTC [8349] repl_user@db LOG:  logical decoding found initial starting point at 7B0/6C777D10
2019-01-14 14:20:39.924 UTC [8349] repl_user@db DETAIL:  Waiting for transactions (approximately 2) older than 827339177 to end.

Но это все. Команда CREATE SUBSCRIPTION никогда не заканчивается.

Master - это БД с тяжелыми вставками, например, 100 с в минуту, но они все всегда преданы. Так что не должно быть никаких длительных незафиксированных транзакций.

Я пытался гуглить по этой проблеме, но ничего не нашел. Что мне не хватает?

1 ответ

Решение

Поскольку базы данных "в облаке", вы не знаете, где они на самом деле.

Скорее всего, они находятся в одном кластере базы данных, что объясняет тупик, который вы видите: CREATE SUBSCRIPTION ожидает завершения всех одновременных транзакций в кластере, который содержит базу данных источника репликации, прежде чем он сможет создать свой слот репликации, но, поскольку обе базы данных находятся в одном кластере, он ожидает завершения своей работы, что, очевидно, не произойдет.

Решение состоит в том, чтобы явно создать слот логической репликации в исходной базе данных и использовать этот существующий слот при создании подписки.

Другие вопросы по тегам