13.6. Advertencias (Caveats) #

Algunos comandos DDL, actualmente solo TRUNCATE y las formas de reescritura de tablas de ALTER TABLE, no son seguros para MVCC. Esto significa que una vez que se compromete la división o reescritura, la tabla aparecerá vacía para las transacciones concurrentes si están utilizando una instantánea tomada antes de que se comprometiera el comando DDL. Esto solo será un problema para una transacción que no haya accedido a la tabla en cuestión antes de que comenzara el comando DDL — cualquier transacción que lo haya hecho mantendría al menos un bloqueo de tabla ACCESS SHARE, lo que bloquearía el comando DDL hasta que esa transacción finalice. Por tanto, estos comandos no causarán ninguna inconsistencia aparente en el contenido de la tabla para consultas sucesivas sobre la tabla objetivo, pero podrían causar una inconsistencia visible entre el contenido de la tabla objetivo y otras tablas de la base de datos.

El soporte para el nivel de aislamiento de transacciones Serializable aún no se ha añadido a los objetivos de replicación de espera activa (hot standby) (descritos en la Section 26.4). El nivel de aislamiento más estricto soportado actualmente en el modo de espera activa es Repeatable Read. Aunque realizar todas las escrituras permanentes de la base de datos dentro de transacciones Serializables en el primario garantizará que todos los servidores de espera alcancen eventualmente un estado consistente, una transacción Repeatable Read ejecutada en el servidor de espera puede ver a veces un estado transitorio que es inconsistente con cualquier ejecución serial de las transacciones en el primario.

El acceso interno a los catálogos del sistema no se realiza utilizando el nivel de aislamiento de la transacción actual. Esto significa que los objetos de base de datos recién creados, como las tablas, son visibles para las transacciones concurrentes Repeatable Read y Serializable, aunque las filas que contienen no lo sean. Por el contrario, las consultas que examinan explícitamente los catálogos del sistema no ven las filas que representan objetos de base de datos creados concurrentemente en los niveles de aislamiento superiores.