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

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

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

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

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

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

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

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

3.14.5. Списки столбцов

3.14.5.1. Примеры

В каждой публикации можно дополнительно указать, какие именно столбцы каждой таблицы будут реплицироваться подписчикам. Таблица на стороне подписчика должна содержать как минимум все те столбцы, которые включены в публикацию. Если список столбцов не указан, то реплицируются все столбцы на стороне издателя. Подробнее см. CREATE PUBLICATION для получения информации о синтаксисе.

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

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

Список столбцов может содержать только простые ссылки на столбцы. Порядок столбцов в списке не сохраняется.

Указание списка столбцов в случаях, когда публикация также публикует FOR TABLES IN SCHEMA не поддерживается.

Для секционированных таблиц параметр публикации publish_via_partition_root определяет, какой список столбцов будет использоваться. Если publish_via_partition_root имеет значение true, используется список столбцов корневой секционированной таблицы. В противном случае, если publish_via_partition_root имеет значение false (по умолчанию), используется список столбцов каждой секции.

Если публикация публикует UPDATE или DELETE операции, любой список столбцов должен включать столбцы идентификатора реплики таблицы (см. REPLICA IDENTITY). Если публикация публикует только INSERT операции, то в списке столбцов можно не указывать столбцы идентификатора реплики.

Списки столбцов не влияют на команду TRUNCATE command.

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

Внимание: объединение списков столбцов из нескольких публикаций

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

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

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

3.14.5.1. Примеры #

Создание таблицы t1 для использования в следующем примере.

test_pub=# CREATE TABLE t1(id int, a text, b text, c text, d text, e text, PRIMARY KEY(id));
CREATE TABLE

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

test_pub=# CREATE PUBLICATION p1 FOR TABLE t1 (id, b, a, d);
CREATE PUBLICATION

psql может применяться для вывода списков столбцов (если они определены) для каждой публикации.

test_pub=# \dRp+
                               Публикация p1
  Владелец   | Все таблицы | Вставки | обновления | удаление | команды TRUNCATE | через корневую таблицу
----------+------------+---------+---------+---------+-----------+----------
 postgres | f          | t       | t       | t       | t         | f
Таблицы:
    "public.t1" (id, a, b, d)

psql может применяться для вывода списков столбцов (если они определены) для каждой таблицы.

test_pub=# \d t1
                 Таблица "public.t1"
 Столбец |  Тип   | Правило сортировки | Допускающий значение NULL | По умолчанию
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
 a      | text    |           |          |
 b      | text    |           |          |
 c      | text    |           |          |
 d      | text    |           |          |
 e      | text    |           |          |
Индексы:
    "t1_pkey" PRIMARY KEY, btree (id)
Публикации:
    "p1" (id, a, b, d)

На узле-подписчике создается таблица t1 которой теперь требуется только подмножество столбцов, присутствовавших в таблице издателя t1, а также создается подписка s1 , обеспечивающая подписку на публикацию p1.

test_sub=# CREATE TABLE t1(id int, b text, a text, d text, PRIMARY KEY(id));
CREATE TABLE
test_sub=# CREATE SUBSCRIPTION s1
test_sub-# CONNECTION 'host=localhost dbname=test_pub application_name=s1'
test_sub-# PUBLICATION p1;
CREATE SUBSCRIPTION

На узле-издателе в таблицу вставляется несколько строк t1.

test_pub=# INSERT INTO t1 VALUES(1, 'a-1', 'b-1', 'c-1', 'd-1', 'e-1');
INSERT 0 1
test_pub=# INSERT INTO t1 VALUES(2, 'a-2', 'b-2', 'c-2', 'd-2', 'e-2');
INSERT 0 1
test_pub=# INSERT INTO t1 VALUES(3, 'a-3', 'b-3', 'c-3', 'd-3', 'e-3');
INSERT 0 1
test_pub=# SELECT * FROM t1 ORDER BY id;
 id |  a  |  b  |  c  |  d  |  e
----+-----+-----+-----+-----+-----
  1 | a-1 | b-1 | c-1 | d-1 | e-1
  2 | a-2 | b-2 | c-2 | d-2 | e-2
  3 | a-3 | b-3 | c-3 | d-3 | e-3
(3 rows)

Репликации подлежат только данные из списка столбцов публикации p1 is replicated.

test_sub=# SELECT * FROM t1 ORDER BY id;
 id |  b  |  a  |  d
----+-----+-----+-----
  1 | b-1 | a-1 | d-1
  2 | b-2 | a-2 | d-2
  3 | b-3 | a-3 | d-3
(3 rows)
Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

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