G.3. pgpro_logical_slot — управление слотами логической репликации #

G.3.1. Обзор #

pgpro_logical_slot — это расширение Postgres Pro Enterprise для управления слотами логической репликации. С помощью расширения можно создать слот в прошлом для указанного LSN. Это применимо, когда нужно восстановить утерянный слот логической репликации.

У расширения pgpro_logical_slot есть следующие ограничения:

  • Стандартные ограничения создания слота логической репликации, т.е. для параметра wal_level должно быть задано значение logical с момента restart_lsn.

  • Сегменты WAL с момента restart_lsn до текущего LSN должны присутствовать на физическом узле.

  • Во временном интервале между restart_lsn и созданием слота логической репликации структура реплицируемой таблицы должна оставаться неизменной.

  • При создании слота логической репликации pgpro_logical_slot ищет точку согласованности — подходящий начальный LSN, откуда можно безопасно начать логическое декодирование. Чтобы её найти, необходимо, чтобы на узле в интервале между restart_lsn и созданием слота логической репликации имелись контрольные точки. После создания слота необходимо убедиться, что текущий начальный LSN, возвращённый функцией pgpro_logical_slot.pgpro_create_logical_replication_slot, соответствует вашим требованиям.

G.3.2. Установка #

Расширение pgpro_logical_slot поставляется вместе с Postgres Pro Enterprise в виде отдельного пакета pgpro-logical-slot-ent-18. За подробной инструкцией по установке обратитесь к Главе 17. После установки Postgres Pro Enterprise создайте расширение pgpro_logical_slot:

CREATE EXTENSION pgpro_logical_slot;

G.3.3. Функции #

pgpro_logical_slot.pgpro_create_logical_replication_slot (имя_слота name, имя_модуля name, temporary boolean, twophase boolean, restart_lsn pg_lsn) returns record (имя_слота name, lsn pg_lsn) #

Создаёт слот логической репликации с restart_lsn в прошлом. Функция принимает следующие параметры:

  • имя_слота: имя создаваемого слота логической репликации.

  • имя_модуля: имя модуля вывода.

  • temporary: необязательный параметр, который определяет, будет ли слот постоянно храниться на диске. Если задано значение true, слот не хранится на диске и используется только в текущем сеансе. Временные слоты также освобождаются при любой ошибке.

  • twophase: необязательный параметр, который определяет, включить ли декодирование подготовленных транзакций для этого слота. Если задано значение true, декодирование включено.

  • restart_lsn: значение restart_lsn последнего известного работающего состояния слота логической репликации или, если слот создаётся впервые, требуемого состояния слота физической репликации.

Функция возвращает запись, содержащую имя слота и значение начального LSN, который отличается от restart_lsn и с которого начинается логическая репликация. Все транзакции, зафиксированные после этого LSN, будут реплицированы.

Например:

postgres=# SELECT pgpro_logical_slot.pgpro_create_logical_replication_slot('s2', 'test_decoding', false, false, '0/17C8520'::pg_lsn);
pgpro_create_logical_replication_slot
---------------------------------------
(s2,0/17C8568)
(1 row)

Функция pgpro_logical_slot.pgpro_create_logical_replication_slot не проверяет наличие исторических кортежей или необходимых файлов WAL. После создания слота можно выполнить функцию pg_logical_slot_peek_changes, чтобы убедиться, что слот может быть использован для декодирования с LSN в прошлом. Например:

postgres=# SELECT count(*) from pg_logical_slot_peek_changes('s2', null, null);
count
 --------
  160055
 (1 row)

G.3. pgpro_logical_slot — manage logical replication slots #

G.3.1. Overview #

pgpro_logical_slot is a Postgres Pro Enterprise extension to manage logical replication slots. Using the extension, you can create a slot in the past for a specified LSN. It is helpful, when you need to restore a lost logical replication slot.

The pgpro_logical_slot extension has the following limitations:

  • Standard limitations for the logical replication slot creation, i.e., the wal_level value must be logical starting from restart_lsn.

  • WAL segments from restart_lsn to the current LSN must be present on a physical node.

  • In a time interval between restart_lsn and a logical replication slot creation, the structure of the replicated table must remain unchanged.

  • When creating a logical replication slot, pgpro_logical_slot searches for a consistency point — a valid starting LSN from which logical decoding can safely begin. To find it, it is required to have checkpoints on the node in a time interval between restart_lsn and the logical replication slot creation. When the slot is created, you must verify that the actual starting LSN returned by the pgpro_logical_slot.pgpro_create_logical_replication_slot function meets your requirements.

G.3.2. Installation #

The pgpro_logical_slot extension is provided with Postgres Pro Enterprise as a separate pre-built package pgpro-logical-slot-ent-18. For the detailed installation instructions, refer to Chapter 17. Once you have Postgres Pro Enterprise installed, create the pgpro_logical_slot extension:

CREATE EXTENSION pgpro_logical_slot;

G.3.3. Functions #

pgpro_logical_slot.pgpro_create_logical_replication_slot (slot_name name, plugin_name name, temporary boolean, twophase boolean, restart_lsn pg_lsn) returns record (slot_name name, lsn pg_lsn) #

Creates a logical replication slot with restart_lsn in the past. The function takes the following parameters:

  • slot_name: The name of the logical replication slot being created.

  • plugin_name: The output plugin name.

  • temporary: An optional parameter that determines whether the slot should be permanently stored on disk. When set to true, the slot is not stored on disk and is only meant for use by the current session. Temporary slots are also released upon any error.

  • twophase: An optional parameter that determines whether to enable the decoding of prepared transactions for this slot. When set to true, the decoding is enabled.

  • restart_lsn: The restart_lsn value of the last known operational state of a logical replication slot, or, if the slot is created for the first time, of the required state of a physical replication slot.

The function returns a record containing the slot name and the starting LSN value, which is different from restart_lsn and where logical replication is started. All transactions committed after this LSN are replicated.

For example:

postgres=# SELECT pgpro_logical_slot.pgpro_create_logical_replication_slot('s2', 'test_decoding', false, false, '0/17C8520'::pg_lsn);
pgpro_create_logical_replication_slot
---------------------------------------
(s2,0/17C8568)
(1 row)

The pgpro_logical_slot.pgpro_create_logical_replication_slot function does not check for presence of historical tuples and the required WAL files. After creating a slot, you can optionally execute the pg_logical_slot_peek_changes function to ensure your slot can be used for decoding from LSN in the past. For example:

postgres=# SELECT count(*) from pg_logical_slot_peek_changes('s2', null, null);
count
 --------
  160055
 (1 row)
FAQ