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:
- Bloqueio explícito - manual do PostgreSQL
-
SELECT ... FOR [UPDATE|SHARE]
- bloqueio no nível da linha -
LOCK
- bloqueio no nível da tabela - O bloqueio no PostgreSQL é uma discussão mais avançada sobre o bloqueio