sql >> Database teknologi >  >> RDS >> PostgreSQL

lås rækkerne indtil næste vælg postgres

Jeg tror ikke, det er muligt. Du kan ikke blokere en skrivebeskyttet adgang til en tabel (medmindre dette valg er udført FOR UPDATE )

Så vidt jeg kan se, er den eneste chance, du har, at bruge pg_advisory_lock() fungere.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS

Men dette kræver en "manuel" udløsning af låsene opnået gennem den. Du får ikke en automatisk oplåsning med det.

For at låse rækkerne har du brug for noget som dette:

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

(Bemærk brugen af ​​den afledte tabel for LIMIT-delen. Se det manuelle link, jeg postede for en forklaring)

Så skal du gemme de hentede id'er og senere ringe til pg_advisory_unlock() for hvert ID.

Hvis hver proces altid frigiver alle ID'er på én gang, du kan simpelthen bruge pg_advisory_unlock_all() i stedet. Så behøver du ikke gemme de hentede ID'er.

Bemærk, at dette ikke vil forhindre andre i at læse rækkerne ved at bruge "normale" markeringer. Det vil kun fungere, hvis hver proces, der får adgang til den tabel, bruger det samme mønster til at opnå låsene.



  1. phpMyBackupPro – Et webbaseret MySQL-sikkerhedskopieringsværktøj til Linux

  2. Gentagende værdier ved udfyldning af en J-tabel

  3. Optimizer-begrænsninger med filtrerede indekser

  4. Opdatering af resultatsæt med SQL Array-typer i JDBC / PostgreSQL