29.1. Публикация#

29.1. Публикация

29.1. Публикация #

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

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

Публикации могут выбрать ограничить изменения, которые они производят, до любой комбинации INSERT, UPDATE, DELETE и TRUNCATE, аналогично тому, как триггеры срабатывают по определенным типам событий. По умолчанию реплицируются все типы операций. Эти спецификации публикации применяются только для операций DML; они не влияют на начальную копию синхронизации данных. (Фильтры строк не имеют эффекта для TRUNCATE. См. Раздел 29.3).

Опубликованная таблица должна иметь настроенную реплицируемую идентичность для того, чтобы можно было реплицировать операции UPDATE и DELETE, чтобы соответствующие строки для обновления или удаления могли быть идентифицированы на стороне подписчика. По умолчанию это первичный ключ, если он есть. Другой уникальный индекс (с определенными дополнительными требованиями) также может быть установлен в качестве реплицируемой идентичности. Если таблица не имеет подходящего ключа, то можно установить реплицируемую идентичность в значение FULL, что означает, что вся строка становится ключом. Когда указана реплицируемая идентичность FULL, индексы могут использоваться на стороне подписчика для поиска строк. Кандидатные индексы должны быть btree, непарциальными, и самое левое поле индекса должно быть столбцом (а не выражением), которое ссылается на столбец опубликованной таблицы. Эти ограничения на свойства неуникального индекса соответствуют некоторым ограничениям, которые применяются к первичным ключам. Если таких подходящих индексов нет, поиск на стороне подписчика может быть очень неэффективным, поэтому реплицируемую идентичность FULL следует использовать только в качестве запасного варианта, если нет другой возможности. Если на стороне издателя установлена реплицируемая идентичность, отличная от FULL, то на стороне подписчика также должна быть установлена реплицируемая идентичность, состоящая из тех же или меньшего количества столбцов. См. REPLICA IDENTITY для получения подробной информации о том, как установить реплицируемую идентичность. Если таблица без реплицируемой идентичности добавляется в публикацию, которая реплицирует операции UPDATE или DELETE, то последующие операции UPDATE или DELETE вызовут ошибку на стороне издателя. Операции INSERT могут выполняться независимо от любой реплицируемой идентичности.

Каждая публикация может иметь несколько подписчиков.

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

Индивидуальные таблицы могут быть добавлены и удалены динамически с помощью ALTER PUBLICATION. Оба операции ADD TABLE и DROP TABLE являются транзакционными; поэтому таблица начнет или прекратит репликацию с правильным снимком после коммита транзакции.