sql >> Database >  >> RDS >> PostgreSQL

vergrendel de rijen tot de volgende selecteer postgres

Ik denk niet dat dit mogelijk is. U kunt een alleen-lezen toegang tot een tabel niet blokkeren (tenzij die selectie is gedaan FOR UPDATE )

Voor zover ik weet, is de enige kans die je hebt het gebruik van de pg_advisory_lock() functie.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS

Maar dit vereist een "handmatige" ontgrendeling van de sloten die hierdoor zijn verkregen. Je krijgt daarmee geen automatische ontgrendeling.

Om de rijen te vergrendelen heb je zoiets als dit nodig:

select pg_advisory_lock(id), * 
from 
( 
  select * table1 order by id limit 5
) t

(Let op het gebruik van de afgeleide tabel voor het LIMIT-gedeelte. Zie de handmatige link die ik heb gepost voor een uitleg)

Vervolgens moet u de opgehaalde ID's opslaan en later pg_advisory_unlock() aanroepen voor elke ID.

Als elk proces altijd alles vrijgeeft ID's tegelijk, u kunt gewoon pg_advisory_unlock_all() gebruiken in plaats van. Dan hoeft u de opgehaalde ID's niet op te slaan.

Merk op dat dit niet voorkomen dat anderen de rijen lezen met behulp van "normale" selecties. Het werkt alleen als elk proces dat toegang heeft tot die tabel hetzelfde patroon gebruikt voor het verkrijgen van de vergrendelingen.



  1. Betere PHP, MySql, HTML en JavaScript IDE

  2. Meerdere niet-gedupliceerde rijen tegelijk bijwerken met Groeperen op

  3. Kolom toevoegen OF verwijderen uit CDC-geactiveerde tabel zonder gegevens te verliezen in SQL Server-database - SQL Server-zelfstudie

  4. MySQL ontvang de laatste conversatieberichten