Публикация
Эта страница переведена при помощи нейросети GigaChat.
Публикация может быть определена для любой основной физической репликации. Узел, на котором определяется публикация, называется издателем. Публикация представляет собой набор изменений, генерируемых из таблицы или группы таблиц, и также может называться набором изменений или набором репликаций. Каждая публикация существует только в одной базе данных.
Публикации отличаются от схем и не влияют на то, как осуществляется доступ к таблице. Каждую таблицу можно добавлять в несколько публикаций при необходимости. В настоящее время публикации могут содержать только таблицы и все таблицы в схеме. Объекты должны добавляться явно, за исключением случаев, когда создается публикация для ALL TABLES
.
Публикации могут выбирать ограничение изменений, которые они производят для любой комбинации INSERT
, UPDATE
, DELETE
и TRUNCATE
, аналогично тому, как триггеры срабатывают при определенных типах событий. По умолчанию реплицируются все типы операций. Эти спецификации публикации применяются только к операциям DML, они не влияют на начальную синхронизацию данных копирования. Фильтры строк не имеют никакого эффекта для TRUNCATE
. См. раздел «Фильтры строк».
Опубликованная таблица должна иметь настроенную идентичность реплики, чтобы иметь возможность реплицировать операции UPDATE
и DELETE
, так чтобы соответствующие строки для обновления или удаления могли быть идентифицированы на стороне подписчика. По умолчанию это первичный ключ, если он есть. Также можно установить другой уникальный индекс (с некоторыми дополнительными требованиями), который будет использоваться в качестве идентичности реплики. Если у таблицы нет подходящего ключа, то его можно задать как идентификатор реплики FULL
, при котором вся строка становится ключом. Когда указана идентичность реплики FULL
, индексы могут использоваться на стороне подписчика для поиска строк. Кандидаты на индексацию должны быть типа btree или hash, неполные и их левое поле индекса должно быть колонкой (не выражением), ссылающейся на столбец опубликованной таблицы. Эти ограничения на свойства неключевых индексов соответствуют некоторым ограничениям, применяемым к первичным ключам. Если таких подходящих индексов нет, поиск на стороне подписчика может оказаться очень неэффективным, поэтому идентичность реплики FULL
следует использовать только в крайнем случае, если невозможно найти другое решение. Если на стороне издателя установлена идентичность реплики, отличная от FULL
, то такая же или меньшая по количеству полей идентичность реплики должна быть установлена и на стороне подписчика. Подробности о том, как настроить идентичность реплики, см. в разделе REPLICA IDENTITY
. Если таблицу без идентификатора реплики добавить в публикацию, которая реплицирует операции UPDATE
или DELETE
, последующие операции UPDATE
или DELETE
вызовут ошибку на стороне издателя. Операции INSERT
могут выполняться независимо от какой-либо идентичности реплики.
Каждая публикация может иметь несколько подписчиков.
Публикация создается с использованием команды CREATE PUBLICATION
, и позже ее можно изменить или удалить с помощью соответствующих команд.
Отдельные таблицы могут быть добавлены и удалены динамически с использованием ALTER PUBLICATION
. Обе операции ADD TABLE
и DROP TABLE
являются транзакционными, поэтому таблица начнет или прекратит репликацию в нужный момент после фиксации транзакции.