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

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

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

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

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

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

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

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

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

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