CREATE SUBSCRIPTION

CREATE SUBSCRIPTION — определить новую подписку

Синтаксис

CREATE SUBSCRIPTION имя_подписки
    CONNECTION 'строка_подключения'
    PUBLICATION имя_публикации [, ...]
    [ WITH ( параметр_подписки [= значение] [, ... ] ) ]

Описание

Команда CREATE SUBSCRIPTION добавляет новую подписку для текущей базы данных. Имя подписки должно отличаться от имени любой существующей подписки в базе данных.

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

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

Параметры

имя_подписки

Имя новой подписки.

CONNECTION 'строка_подключения'

Строка подключения к публикующему серверу..

PUBLICATION имя_публикации

Имена публикаций на публикующем сервере, на которые производится подписка.

WITH ( параметр_подписки [= значение] [, ... ] )

В этом предложении указываются необязательные параметры для подписки. Поддерживаются следующие параметры:

copy_data (boolean)

Указывает, должны ли копироваться существующие данные в публикациях, на которые выполняется подписка, сразу после запуска репликации. Значение по умолчанию равно true.

create_slot (boolean)

Указывает, должна ли команда создать слот репликации на публикующем сервере. Значение по умолчанию равно true.

enabled (boolean)

Указывает, следует ли активировать репликацию подписки или ее нужно только настроить, но пока не запускать. Значение по умолчанию равно true.

slot_name (string)

Имя используемого слота репликации. Поведение по умолчанию заключается в использовании имени подписки для имени слота.

Когда значение slot_name задается как NONE, с подпиской не будет связан никакой слот репликации. Это можно использовать, если слот репликации будет создан позже вручную. В таких подписках также должны быть установлены значения false для параметров enabled и create_slot.

synchronous_commit (enum)

Значение этого параметра переопределяет параметр synchronous_commit. Значение по умолчанию равно off.

Использование значения off безопасно для логической репликации: если подписчик потеряет транзакции из-за отсутствия синхронизации, данные будут повторно отправлены с публикующего сервера.

При выполнении синхронной логической репликации может потребоваться другой параметр. Модули логической репликации передают на публикующий сервер позиции записанных и сохраненных на диске данных, и при использовании синхронной репликации тот будет ожидать фактического сохранения. Следовательно, значение off параметра synchronous_commit для подписчика при использовании подписки для синхронной репликации может увеличить задержку выполнения COMMIT на публикующем сервере. При таком сценарии может быть выгодно установить для synchronous_commit значение local или выше.

connect (boolean)

Указывает, должна ли CREATE SUBSCRIPTION вообще подключаться к публикующему серверу. При установке для этого параметра значения false значения по умолчанию параметров enabled, create_slot и copy_data также сменятся на false.

Не допускается совмещение значения false для параметра connect и значения true для параметров enabled,create_slot или copy_data.

Так как при значении false для этого параметра соединение не устанавливается, подписка на таблицы не производится, и поэтому после включения подписки ничего реплицироваться не будет. Чтобы запустить подписку на таблицы, нужно выполнить команду ALTER SUBSCRIPTION ... REFRESH PUBLICATION.

Примечания

.

При создании слота репликации (поведение по умолчанию) команду CREATE SUBSCRIPTION нельзя выполнить внутри блока транзакций.

Создание подписки, которая подключается к одному и тому же кластеру баз данных (например, для репликации между базами данных в одном и том же кластере или для репликации в одной и той же базе данных), будет успешным только в том случае, если слот репликации не создается в рамках той же команды. В противном случае вызов CREATE SUBSCRIPTION будет зависать. Чтобы выполнить эту работу, создайте слот репликации отдельно (с помощью функции pg_create_logical_replication_slot с именем плагина pgoutput) и создайте подписку с помощью параметра create_slot = false. Это ограничение реализации, которое может быть снято в будущем выпуске.

Примеры

Создание подписки на удаленный сервер, который реплицирует таблицы в публикациях mypublication и insert_only с немедленным запуском репликации при фиксации транзакции:

CREATE SUBSCRIPTION mysub
         CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
        PUBLICATION mypublication, insert_only;

Создание подписки на удаленный сервер, который реплицирует таблицы в публикацию insert_only с отложенным запуском репликации.

CREATE SUBSCRIPTION mysub
         CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
        PUBLICATION insert_only
               WITH (enabled = false);

Совместимость

Команда CREATE SUBSCRIPTION является расширением QHB.

См. также

ALTER SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION