Eu tenho uma tabela A, que faz referência a duas outras tabelas B e C. Gostaria de entender o que está acontecendo exatamente quando estou descartando A.
Ao descartar A, meu entendimento é que um bloqueio de acesso exclusivo precisa ser adquirido em A e B (principalmente para remover gatilhos?).
Estou curioso para saber como são feitos esses bloqueios: os bloqueios em B e C são adquiridos ao mesmo tempo? ou sequencialmente?
Se esse for o primeiro caso, isso poderia explicar algum impasse que às vezes percebo ao descartar tabelas
Obrigado
Você está certo: se você eliminar uma tabela, todas as suas restrições de chave estrangeira também serão eliminadas, e eliminar os gatilhos do sistema na tabela referenciada requer um
ACCESS EXCLUSIVE
bloqueio nela. Esses bloqueios são todos obtidos durante a execução daDROP TABLE
instrução, na mesma transação. Esses bloqueios serão executados um após o outro, portanto, se você tiver outra transação que precise dessas tabelas, poderá facilmente obter um impasse.