Bloqueio no nível de página do PostgreSQL

1

Sou relativamente novo no postgresql. Eu verifiquei a documentação e não consigo encontrar nada sobre como fazer o bloqueio no nível da página.

Eu entendo que posso definir uma tabela em um modo de bloqueio como este: TABELA DE BLOQUEIO myTable IN LOCKMODE ROW EXCLUSIVE;

Como eu implementaria o bloqueio no nível da página para minha sessão? Deixe-me saber se parece que eu tenho um mal-entendido dos fundamentos.

    
por Lebowski156 01.12.2012 / 18:21

1 resposta

3

Por que você deseja fazer bloqueio explícito no nível da página? Você não controla o que está em cada página, então você estaria bloqueando uma coleção arbitrária de dados. Que propósito isso serviria?

Acho que você está procurando o bloqueio em nível de linha , que é realizado usando SELECT ... FOR UPDATE ou SELECT ... FOR SHARE .

O PostgreSQL atualiza os bloqueios de nível de linha para bloqueios de nível de página internamente em alguns locais, como rastreamento de predicado de instantâneo serializável, gerenciamento de buffer etc. Ele fará isso quando houver muitos bloqueios de nível de linha e eles estiverem se tornando um desempenho questão. Você não precisa se preocupar com isso, pois isso quase não terá efeito sobre você no nível SQL. Bloqueios de linha normais - conforme adquiridos por UPDATE , DELETE , SELECT ... FOR UPDATE , SELECT ... FOR SHARE etc - são AFAIK nunca atualizados para bloqueios no nível da página, pois isso aumentaria a probabilidade de impasses.

Se você estiver realmente convencido de que deseja o bloqueio no nível da página, explique o problema que está tentando resolver com mais detalhes e por que o bloqueio no nível da linha ou da tabela não funciona.

Veja:

por 02.12.2012 / 09:08