29.6. Ограничения#

29.6. Ограничения

29.6. Ограничения #

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

  • Все схемы базы данных и команды DDL не реплицируются. Исходная схема может быть скопирована вручную с помощью pg_dump --schema-only. Последующие изменения схемы должны быть синхронизированы вручную. (Однако, обратите внимание, что нет необходимости, чтобы схемы были абсолютно одинаковыми на обеих сторонах). Логическая репликация надежна при изменении определений схемы в рабочей базе данных: когда схема изменяется на издателе и реплицируемые данные начинают поступать на подписчика, но не соответствуют схеме таблицы, репликация будет вызывать ошибку до обновления схемы. Во многих случаях, временные ошибки можно избежать, применяя добавочные изменения схемы сначала на подписчике.

  • Данные последовательности не реплицируются. Данные в столбцах serial или identity, поддерживаемых последовательностями, будут, конечно же, тиражироваться вместе с таблицей, но сама последовательность все равно будет показывать начальное значение на подписчике. Если подписчик используется как база данных только для чтения, то это обычно не является проблемой. Однако, если предполагается какое-либо переключение или отказоустойчивость на подписчике, то последовательности должны быть обновлены до последних значений, либо путем копирования текущих данных с издателя (возможно, с использованием pg_dump), либо путем определения достаточно высокого значения из самих таблиц.

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

  • Все объекты большого размера (см. Глава 32) не реплицируются. Для этого нет обходного пути, кроме хранения данных в обычных таблицах.

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

  • При репликации между секционированными таблицами, фактическая репликация по умолчанию исходит от конечных секций на издателе, поэтому секции на издателе также должны существовать на подписчике как допустимые целевые таблицы. (Они могут быть либо конечными секциями, либо могут быть дополнительно подсекционированы, либо даже могут быть независимыми таблицами.) Публикации также могут указывать, что изменения должны реплицироваться с использованием идентификатора и схемы секционированной корневой таблицы вместо индивидуальных конечных секций, в которых изменения фактически происходят (см. publish_via_partition_root параметр CREATE PUBLICATION).