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