CREATE PUBLICATION

CREATE PUBLICATION — определить новую публикацию

Синтаксис

CREATE PUBLICATION имя
    [ FOR TABLE [ ONLY ] имя_таблицы [ * ] [, ...]
      | FOR ALL TABLES ]
    [ WITH ( параметр_публикации [= значение] [, ... ] ) ]

Описание

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

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

Параметры

имя

Имя новой публикации.

FOR TABLE

Указывает список таблиц для добавления в публикацию. Если перед именем таблицы указано ONLY, в публикацию добавляется только заданная таблица. Без ONLY добавляется и заданная таблица, и все ее потомки (если таковые имеются). После имени таблицы можно добавить необязательное указание *, чтобы явно обозначить, что включены дочерние таблицы.

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

FOR ALL TABLES

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

WITH ( параметр_публикации [= значение] [, ... ] )

В этом предложении указываются необязательные параметры для публикации. Поддерживаются следующие параметры:

  • publish (string)

Этот параметр определяет, какие операции DML будут опубликованы новой публикацией для подписчиков. В качестве его значения через запятую задается список операций. Разрешены следующие операции: insert, update, delete и truncate. По умолчанию публикуются все действия, поэтому значение по умолчанию для этого параметра равно 'insert, update, delete, truncate'.

  • publish_via_partition_root (boolean)

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

Если этот параметр включен, операции TRUNCATE, выполняемые непосредственно с партициями, не реплицируются.

Примечания

Если не задано ни FOR TABLE, ни FOR ALL TABLES, публикация создается с пустым набором таблиц. Это удобно, если таблицы будут добавлены позже.

Создание публикации не запускает репликацию. Оно лишь определяет логику группировки и фильтрации для будущих подписчиков.

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

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

Таблицы, добавленные в публикацию, которая публикует операции UPDATE и/или DELETE, должны иметь свойство REPLICA IDENTITY. В противном случае данные операции для этих таблиц будут запрещены.

Для команды INSERT ... ON CONFLICT публикация выдает операцию, которая фактически является результатом выполнения этой команды. Таким образом, в зависимости от результата, она может быть опубликована как INSERT или UPDATE или не быть опубликована вовсе.

Команды COPY ... FROM публикуются в виде операций INSERT.

Операции DDL не публикуются.

Примеры

Создание публикации, охватывающей изменения в двух таблицах:

CREATE PUBLICATION mypublication FOR TABLE users, departments;

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

CREATE PUBLICATION alltables FOR ALL TABLES;

Создание публикации, охватывающей только операции INSERT в одной таблице:

CREATE PUBLICATION insert_only FOR TABLE mydata
    WITH (publish = 'insert');

Совместимость

Команда CREATE PUBLICATION является расширением QHB.

См. также

ALTER PUBLICATION, DROP PUBLICATION