Desculpe a pergunta noob, mas qual é o modo de bloqueio de nÃvel de tabela correto para permitir a leitura de uma tabela, mas não a gravação nela?
O cenário que tenho é que quero impedir que duas tabelas sejam gravadas enquanto uma terceira tabela está recebendo uma atualização. Assim que essa atualização for concluÃda, não há problema em que as outras duas tabelas sejam desbloqueadas e recebam atualizações adicionais.
Se não for possÃvel impedir que essas tabelas sejam gravadas enquanto ainda permite que elas sejam lidas, eu também poderia bloqueá-las completamente para que elas não possam ser gravadas ou lidas durante o bloqueio.
Aqui está a página de documentação, eu só não entendo o que está dizendo: https://www.postgresql.org/docs/current/explicit-locking.html
Não faça isso. Bloquear tabelas explicitamente é quase sempre a coisa errada a se fazer. Se você descrever o caso de uso com mais detalhes, estou confiante de que uma solução melhor pode ser encontrada.
Bloquear mesas com frequência impedirá que o autovacuum faça seu importante trabalho na mesa e, eventualmente, um trabalho de autovacuum anti-wraparound surgirá e bloqueará você, parando o processamento.
Concordo que os documentos não são os mais fáceis de entender quando você ainda não sabe o que eles estão dizendo. Mas uma vez que você sabe que a resposta é
lock table foobar in exclusive mode
, acho que fica bem claro em retrospectiva.Embora provavelmente existam maneiras melhores de fazer o que você está tentando fazer, como talvez aumentar seu nÃvel de isolamento. Embora este possa ser o mais fácil de entender, e isso tem algum valor.