Myslím, že to není možné. Nemůžete zablokovat přístup pouze pro čtení k tabulce (pokud není tento výběr proveden FOR UPDATE )
Pokud vím, jediná šance, kterou máte, je použít pg_advisory_lock() funkce.
https://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Ale to vyžaduje "ruční" uvolnění zámků získaných prostřednictvím toho. S tím nezískáte automatické odemykání.
K uzamčení řádků byste potřebovali něco takového:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Všimněte si použití odvozené tabulky pro část LIMIT. Vysvětlení viz odkaz na příručku, kterou jsem zveřejnil)
Poté je třeba uložit načtená ID a později zavolat pg_advisory_unlock() pro každé ID.
Pokud každý proces vždy uvolňuje vše ID najednou, můžete jednoduše použít pg_advisory_unlock_all() namísto. Potom nebudete muset ukládat získaná ID.
Upozorňujeme, že to nebude zabránit ostatním ve čtení řádků pomocí "normálních" výběrů. Bude to fungovat pouze v případě, že každý proces, který přistupuje k této tabulce, používá stejný vzor získávání zámků.