Управление слотами репликации
Кластер Managed Service for PostgreSQL может содержать физические и логические слоты репликации:
- Физические слоты создаются сервисом автоматически на базе хостов-реплик и используются для репликации данных в рамках самого кластера Managed Service for PostgreSQL.
- Логические слоты создаются пользователем и используются для логической репликации данных между кластерами, например при захвате изменений данных (CDC).
Подробности см. в документации PostgreSQL
Посмотреть список логических слотов репликации
-
Подключитесь к базе данных с помощью учетной записи пользователя с ролью
mdb_replication
. -
Выполните SQL-запрос:
SELECT * FROM pg_replication_slots WHERE slot_type='logical';
Запрос возвращает таблицу всех логических слотов репликации с их параметрами.
Создать слот репликации
-
Задайте максимальный размер WAL при репликации в настройке
Max slot wal keep size
.Важно
При значении настройки
-1
(размер не ограничен) открытые логические слоты репликации, из которых не считывается информация, будут препятствовать удалению WAL-файлов. В результате WAL-файлы займут все дисковое пространство, и вы потеряете возможность подключаться к кластеру. -
Подключитесь к базе данных с помощью учетной записи пользователя с ролью
mdb_replication
. -
Выполните SQL-запрос:
SELECT pg_create_logical_replication_slot ( '<имя_слота>', '<имя_плагина>', <temporary>, <two_phase> )
Где:
<имя_слота>
— уникальное имя слота. Обязательный параметр.<имя_плагина>
— имя плагина из списка поддерживаемых выходных плагинов. Список см. в разделе Репликация. Обязательный параметр.temporary
— если выбрано значениеtrue
, слот будет удален по окончании текущей сессии или при возникновении ошибки. По умолчаниюfalse
.two_phase
— если выбрано значениеtrue
, слот будет декодировать подготовленные транзакции . По умолчаниюfalse
.
Удалить слот репликации
-
Подключитесь к базе данных с помощью учетной записи пользователя с ролью
mdb_replication
. -
Выполните SQL-запрос:
SELECT pg_drop_replication_slot ('<имя_слота>');
Пример
Чтобы создать новый слот репликации с именем json_slot
, который декодирует информацию об изменениях базы данных в формат JSON с помощью плагина wal2json
:
-
Убедитесь, что в настройке
Max slot wal keep size
задано значение, отличное от-1
. -
Выполните SQL-запрос:
SELECT pg_create_logical_replication_slot ( 'json_slot', 'wal2json', false, false );
Вариант ответа:
pg_create_logical_replication_slot ------------------------------------ (json_slot,1/92001108) (1 row)
-
Убедитесь, что слот появился в списке:
SELECT * from pg_replication_slots;
Если слот вам больше не нужен, удалите его:
SELECT pg_drop_replication_slot ('json_slot');