Qual é o tempo de vida de uma declaração preparada do servidor do PostgreSQL
De acordo comDocumentação do PostgreSQL, uma instrução preparada é vinculada a uma sessão / conexão do banco de dados:
PREPARE cria uma declaração preparada. Uma declaração preparada é um objeto do lado do servidor que pode ser usado para otimizar o desempenho. Quando a instrução PREPARE é executada, a instrução especificada é analisada, analisada e reescrita. Quando um comando EXECUTE é emitido posteriormente, a instrução preparada é planejada e executada.
As instruções preparadas duram apenas pela duração da sessão atual do banco de dados. Quando a sessão termina, a declaração preparada é esquecida e, portanto, deve ser recriada antes de ser usada novamente.
Mas então,Markus Winand (autor do SQL Performance Explained) diz que:
O PostgreSQL não possui um cache de plano de consulta compartilhado, mas possui um cache de plano de consulta opcional para instruções preparadas. Isso significa que o desenvolvedor tem a opção de usar uma instrução preparada com ou sem plano de consulta em cache. Mas observe que o cache é descartado quando a instrução preparada é fechada.
Qual deles é o verdadeiro?
A instrução preparada permanece enquanto a conexão com o banco de dados estiver aberta; portanto, ao usar um conjunto de conexões, ela pode permanecer desde que o conjunto não feche explicitamente a conexão física ou a instrução preparada do lado do servidor seja eliminada assim que o JDBCDeclaração preparada está fechado.