sql >> Databáze >  >> RDS >> PostgreSQL

zamkněte řádky, dokud příště nevyberete postgres

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ů.



  1. Tvůrce ORACLE FORMS

  2. Nelze se připojit k Oracle přes VBA - SQLSetConnectAttr ovladače se nezdařil

  3. Vkládání MySQL z jedné databáze do druhé

  4. Expdp z prostředí Oracle RAC