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

Я пытаюсь установить логическую репликацию между двумя облачными экземплярами как в 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 никогда не заканчивается.

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

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

1 Ответ

0 голосов
/ 15 января 2019

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

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

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

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