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.
http://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ů.