×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.82. CREATE SUBSCRIPTION

6.1.82. CREATE SUBSCRIPTION

CREATE SUBSCRIPTION — создание новой подписки

Синтаксис

CREATE SUBSCRIPTION subscription_name
    CONNECTION 'conninfo'
    PUBLICATION publication_name [, ...]
    [ WITH ( subscription_parameter [= option] [, ... ] ) ]

Описание

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

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

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

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

Дополнительная информация о подписках и логической репликации в целом доступна в Раздел 3.14.2 и Глава 3.14.

Параметры

subscription_name #

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

CONNECTION 'conninfo' #

Строка libpq подключения, определяющая способ подключения к базе данных издателя. Подробности см. в Раздел 4.1.1.1.

PUBLICATION publication_name [, ...] #

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

WITH ( subscription_parameter [= option] [, ... ] ) #

Данное предложение определяет необязательные параметры подписки.

Следующие параметры управляют процессом создания подписки:

connect (boolean) #

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

Так как при установке этого параметра в falseсоединение не устанавливается, подписка на таблицы не выполняется. Чтобы инициировать репликацию, необходимо вручную создать слот репликации, включить переключение при отказе, если это необходимо, включить подписку и обновить подписку. См. Раздел 3.14.2.3 для примеров.

create_slot (boolean) #

Определяет, должна ли команда создать слот репликации на стороне издателя. По умолчанию — true.

Если установлено значение false, вы несете ответственность за создание слота на издателе другим способом. См. Раздел 3.14.2.3 для примеров.

enabled (boolean) #

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

slot_name (строка) #

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

Установка значения slot_name в NONE означает, что с данной подпиской не будет связан ни один слот репликации. Для таких подписок параметры enabled и create_slot должны быть установлены в false. Используйте этот параметр при последующем ручном создании слота репликации. См. Раздел 3.14.2.3 для примеров.

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

Следующие параметры управляют поведением репликации подписки после её создания:

binary (boolean) #

Определяет, будет ли подписка запрашивать у издателя отправку данных в двоичном формате (в отличие от текстового). По умолчанию — false. Любое копирование при начальной синхронизации таблиц (см. copy_data) также использует тот же формат. Двоичный формат может быть быстрее текстового, но он менее переносим между архитектурами машин и Digital Q.DataBase версиями. Двоичный формат строго привязан к типам данных; например, он не позволит выполнять копирование из столбца smallint в столбец integer столбец, хотя это нормально работало бы в текстовом формате. Даже если этот параметр включен, только типы данных, имеющие двоичные функции отправки и приема, будут передаваться в двоичном виде. Обратите внимание, что начальная синхронизация требует, чтобы все типы данных имели двоичные функции отправки и приема, иначе синхронизация завершится ошибкой (см. CREATE TYPE (подробнее о функциях отправки/приема functions).

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

Если издатель имеет Digital Q.DataBase версию ниже 16, любая начальная синхронизация таблиц будет использовать текстовый формат, даже если binary = true.

copy_data (boolean) #

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

Если публикации содержат WHERE предложения, это повлияет на объем копируемых данных. Подробности приведены в Notes for details.

См. Notes , чтобы узнать, как copy_data = true взаимодействует с параметром origin parameter.

streaming (enum) #

Определяет, следует ли включить потоковую передачу выполняющихся транзакций для этой подписки. Значение по умолчанию — off, означает, что все транзакции полностью декодируются на издателе и только затем отправляются подписчику целиком.

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

Если установлено значение parallel, входящие изменения напрямую применяются одним из параллельных рабочих процессов применения, если они доступны. Если ни один параллельный рабочий процесс применения не свободен для обработки потоковых транзакций, то изменения записываются во временные файлы и применяются после того, как транзакция будет зафиксирована. Обратите внимание, что в случае ошибки в параллельном рабочем процессе применения, конечный LSN удаленной транзакции может не отобразиться в журнале сервера.

synchronous_commit (enum) #

Значение этого параметра переопределяет synchronous_commit настройка внутри этого процессов-исполнителей (apply worker) подписки. Значение по умолчанию является off.

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

Другая настройка может быть целесообразной при выполнении синхронной логической репликации. Рабочие процессы логической репликации сообщают издателю о позициях записей и сбросов (flushes), и при использовании синхронной репликации издатель будет ожидать фактического сброса на диск. Это означает, что установка synchronous_commit для подписчика в значение off когда подписка используется для синхронной репликации, может увеличить задержку выполнения COMMIT на издателе. В данном сценарии это может быть целесообразно установить synchronous_commit в локальный или выше.

two_phase (boolean) #

Определяет, включена ли двухфазная фиксация для этой подписки. Значение по умолчанию — false.

Когда двухфазная фиксация включена, подготовленные транзакции отправляются подписчику в момент выполнения PREPARE TRANSACTION, и также обрабатываются как двухфазные транзакции на стороне подписчика. В противном случае подготовленные транзакции отправляются подписчику только при фиксации и затем немедленно обрабатываются подписчиком.

Реализация двухфазной фиксации требует, чтобы репликация успешно завершила фазу начальной синхронизации таблиц . Поэтому, даже если этот режим two_phase включен для подписки, внутреннее состояние двухфазной фиксации остается временно «pending» до тех пор, пока фаза инициализации не завершится. См. столбец subtwophasestate в pg_subscription , чтобы узнать фактическое состояние двухфазной фиксации.

disable_on_error (boolean) #

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

password_required (boolean) #

Если установлено значение true, подключения к издателю, устанавливаемые в результате создания этой подписки, должны использовать аутентификацию по паролю, который должен быть указан в строке подключения. Этот параметр игнорируется, если владельцем подписки является суперпользователь. Значение по умолчанию — true. Только суперпользователи могут устанавливать это значение в false.

run_as_owner (boolean) #

Если установлено значение true, все действия репликации выполняются от имени владельца. Если значение — false, рабочие процессы репликации будут выполнять действия над каждой таблицей от имени владельца этой таблицы. Последний вариант конфигурации как правило, гораздо более безопасен; подробности см. в Раздел 3.14.10. Значение по умолчанию — false.

origin (строка) #

Указывает, будет ли подписка запрашивать у издателя отправку только тех изменений, которые не имеют источника, или отправку всех изменений независимо от источника. Установка значения origin в none означает, что подписка будет запрашивать у издателя отправку только тех изменений, которые не имеют источника. Установка значения origin в any означает, что издатель отправляет изменения независимо от их источника. Значение по умолчанию — any.

См. Notes , чтобы узнать, как copy_data = true взаимодействует с параметром origin parameter.

переключение при отказе (boolean) #

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

При указании параметра типа boolean, the = option часть может быть опущена, что эквивалентно указанию TRUE.

Примечания

См. Раздел 3.14.10 для получения подробной информации о настройке контроля доступа между экземплярами подписки и публикации.

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

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

Если какая-либо таблица в публикации содержит WHERE предложение, строки, для которых expression принимает значение false или null, не будут опубликованы. Если подписка включает несколько публикаций, в которых одна и та же таблица опубликована с различными WHERE предложениями WHERE, строка будет опубликована, если выполняется любое из выражений (относящихся к данной операции публикации). В случае различных WHERE предложений, если одна из публикаций не имеет WHERE предложения WHERE (относящегося к данной операции публикации) или если публикация определена как FOR ALL TABLES или FOR TABLES IN SCHEMA, строки всегда публикуются независимо от определения других выражений. Если подписчик — это Digital Q.DataBase версию ниже 15, то любая фильтрация строк игнорируется на этапе начальной синхронизации данных. В этом случае пользователю, возможно, следует рассмотреть возможность удаления всех первоначально скопированных данных, которые были бы несовместимы с последующей фильтрацией. Поскольку начальная синхронизация данных не учитывает параметр публикации publish при копировании существующих данных таблиц, могут быть скопированы строки, которые не были бы реплицированы с помощью DML. См. Раздел 3.14.2.2 для ознакомления с примерами.

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

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

При использовании комбинации параметров подписки copy_data = true и origin = NONE, данные таблицы для начальной синхронизации копируются напрямую от издателя; это означает, что определить истинный источник этих данных невозможно. Если у издателя также есть подписки, то скопированные данные таблицы могли поступить из более ранних узлов в цепочке. Такой сценарий обнаруживается, и пользователю выводится WARNING, однако это лишь предупреждение о потенциальной проблеме; пользователь несет ответственность за проведение необходимых проверок, чтобы гарантировать, что источники скопированных данных действительно соответствуют требуемым.

Чтобы определить таблицы, которые потенциально могут содержать данные из нелокальных источников (из-за других подписок, созданных на издателе), выполните следующий SQL-запрос:

# замените  ниже именами ваших публикаций, для которых выполняется запрос
SELECT DISTINCT PT.schemaname, PT.tablename
FROM pg_publication_tables PT,
     pg_subscription_rel PS
     JOIN pg_class C ON (C.oid = PS.srrelid)
     JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE N.nspname = PT.schemaname AND
      C.relname = PT.tablename AND
      PT.pubname IN ();

Примеры

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

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 является Digital Q.DataBase расширением.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению