Eu tenho uma tabela bem central em nosso banco de dados que é utilizada por uma série de aplicações, ela possui regras atreladas a ela, triggers e todas as dependências que você possa imaginar. Agora gostaria de modificar a tabela sem causar problemas nas dependências. Anteriormente, consegui fazer o seguinte, mas em um caso muito menos complexo:
alter table reconciliations rename to matches;
create view reconciliations as select * from matches;
O que isso significa é que agora eu poderia modificar a nova tabela "correspondências" e, por exemplo, adicionar uma coluna ou linhas, que não precisam ser apresentadas na exibição "reconciliações" (adicionando uma cláusula where para filtrá-las).
Estou no Postgres 9.5, então a visualização é atualizável automaticamente. Os testes iniciais mostram que não há problemas imediatos com isso, então estou fazendo esta pergunta para saber que tipo de problema devo procurar. O desempenho não é um grande problema.
Se você fizer isso em produção, fique atento às instruções preparadas . Esses já foram analisados, reescritos (e o plano de consulta armazenado em cache). O efeito é ativado até que as instruções preparadas sejam desalocadas (o que pode levar muito tempo).
Para verificar declarações preparadas (somente da mesma sessão!):
O efeito também se estende às funções plpgsql que lidam com comandos SQL como instruções preparadas internamente.
Normalmente, as instruções preparadas são forçadas a serem replanejadas após qualquer alteração nos objetos envolvidos. Mas suas ações contornam esse mecanismo de segurança.
Além disso, a maioria das consultas continuará funcionando. Mas nem todos.
Demonstração
Isso funciona:
Mas isso não :
O manual sobre
PREPARE
:O exemplo acima é outro em que a "equivalência semântica não é perfeita" .