13.6. Пояснения#

13.6. Пояснения

13.6. Пояснения

Некоторые команды DDL, в настоящее время только TRUNCATE и формы перезаписи таблицы ALTER TABLE, не являются безопасными для MVCC. Это означает, что после обрезки или перезаписи таблицы, таблица будет пустой для одновременных транзакций, если они используют снимок, сделанный до коммита команды DDL. Это будет проблемой только для транзакции, которая не обращалась к таблице вопроса до начала команды DDL - любая транзакция, которая это сделала, будет держать по крайней мере блокировку таблицы ACCESS SHARE, которая заблокирует команду DDL до завершения этой транзакции. Таким образом, эти команды не вызовут никакой видимой несогласованности в содержимом таблицы для последующих запросов к целевой таблице, но они могут вызвать видимую несогласованность между содержимым целевой таблицы и другими таблицами в базе данных.

Поддержка уровня изоляции транзакций Serializable пока не добавлена в целевые репликации с горячим резервным копированием (описано в Раздел 25.4). Самый строгий уровень изоляции, который в настоящее время поддерживается в режиме горячего резервного копирования, - Repeatable Read. Хотя выполнение всех постоянных записей базы данных в рамках сериализуемых транзакций на основном сервере обеспечит достижение согласованного состояния на всех резервных серверах, транзакция Repeatable Read, запущенная на резервном сервере, иногда может видеть временное состояние, несогласованное с любым последовательным выполнением транзакций на основном сервере.

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