Verifiquei os documentos do PostgreSQL para https://www.postgresql.org/docs/current/sql-select.html e me perguntei por que há tantas exceções onde FOR UPDATE não é suportado, como
- Agrupar por
- TENDO
- JANELA
- DISTINTO
- UNIÃO
- INTERSETAR
- EXCETO
Existe uma razão lógica convincente para isso ou ainda não foi implementada?
Não tenho certeza do que você quer dizer com
WINDOW
, mas os outros são claros para mim: depois de executar essas construções SQL, as linhas no conjunto de resultados não correspondem mais às linhas individuais da tabela, portanto não está claro quais linhas devem estar bloqueado.Por exemplo, se você consultar
O PostgreSQL selecionará todas as linhas, classificará-as por
name
(explicitamente ou com uma tabela hash), contará os valores de cada grupo e construirá linhas de resultados que consistem na contagem. No momento em que a agregação é concluída, as linhas de resultados não podem mais ser vinculadas às linhas originais da tabela. Isso é bastante óbvio, já que não incluíname
naSELECT
lista, mas não faz diferença real.Teoricamente, seria possível mudar isso, mas não há muito sentido em fazê-lo.