13.6. Advertências #

Alguns comandos de DDL, atualmente apenas o TRUNCATE e as formas de reescrita de tabelas de ALTER TABLE, não são seguros para MVCC, significando que, após o truncamento ou reescrita se tornar efetivo, a tabela aparecerá como estando vazia para as transações concorrentes, se estiverem usando um instantâneo obtido antes da efetivação do comando de DDL. Isto só é um problema para uma transação que não acessou a tabela em questão antes do comando de DDL ser iniciado — qualquer transação que tenha feito isso manteria pelo menos um bloqueio de tabela ACCESS SHARE, que bloquearia o comando DDL até que a transação estivesse concluída. Portanto, estes comandos não causam nenhuma inconsistência aparente no conteúdo da tabela para consultas sucessivas na tabela de destino, mas podem causar inconsistência visível entre o conteúdo da tabela de destino e outras tabelas no banco de dados.

O suporte para o nível de isolamento de transação SERIALIZABLE ainda não foi adicionado aos destinos de replicação por espera ativa (Hot Standby) (descrito em Seção 26.4). O nível de isolamento mais estrito atualmente com suporte no modo de espera ativa é REPEATABLE READ. Ao executar todas as escritas de banco de dados permanentes em transações SERIALIZABLE no servidor primário, garantirá que todos os servidores em-espera finalmente atinjam um estado consistente. Uma transação REPEATABLE READ executada num servidor em espera pode, às vezes, ver um estado transitório inconsistente com qualquer execução serial das transações no servidor primário.

O acesso interno aos catálogos do sistema não é feito usando o nível de isolamento da transação corrente, significando que objetos de banco de dados recém-criados, como tabelas, são visíveis para transações REPEATABLE READ e SERIALIZABLE concorrentes, mesmo que as linhas que eles contêm não sejam. Por outro lado, as consultas que examinam explicitamente os catálogos do sistema não veem linhas representando objetos de banco de dados criados concorrentemente, nos níveis de isolamento mais altos.