CREATE SUBSCRIPTION
CREATE SUBSCRIPTION — создать подписку
Синтаксис
CREATE SUBSCRIPTIONимя_подпискиCONNECTION 'строка_подключения' PUBLICATIONимя_публикации[, ...] [ WITH (параметр_подписки[=значение] [, ... ] ) ]
Описание
CREATE SUBSCRIPTION создаёт подписку для текущей базы данных. Имя подписки должно отличаться от имён других существующих подписок в текущей базе.
Подписка представляет собой реплицирующее подключение к публикующему серверу. Поэтому данная команда не только добавляет определения подписки в локальные каталоги, но также создаёт слот репликации на удалённом сервере.
В момент фиксации транзакции, в рамках которой выполняется эта команда, будет запущен рабочий процесс логической репликации.
Дополнительные сведения о подписках и логической репликации в целом можно найти в Разделе 30.2 и Главе 30.
Параметры
- имя_подписки
- Имя новой подписки. 
- CONNECTION '- строка_подключения'
- Строка подключения к публикующему серверу. Подробности описаны в Подразделе 32.1.1. 
- 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.
 
Замечания
Подробнее о том, как организовать управление доступом подписчиков к публикующему серверу, рассказывается в Разделе 30.7.
При создании слота репликации (поведение по умолчанию) 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 является расширением Postgres Pro.