Jag tror inte att detta är möjligt. Du kan inte blockera en skrivskyddad åtkomst till en tabell (såvida inte valet görs FOR UPDATE
)
Såvitt jag kan se är den enda chansen du har att använda pg_advisory_lock()
fungera.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Men detta kräver en "manuell" frigöring av låsen som erhålls genom den. Du kommer inte att få en automatisk upplåsning med det.
För att låsa raderna skulle du behöva något sånt här:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Observera användningen av den härledda tabellen för LIMIT-delen. Se den manuella länken jag postade för en förklaring)
Sedan måste du lagra de hämtade ID:n och senare ringa pg_advisory_unlock()
för varje ID.
Om varje process alltid släpper alla ID på en gång kan du helt enkelt använda pg_advisory_unlock_all()
istället. Då behöver du inte lagra de hämtade ID:n.
Observera att detta inte gör det hindra andra från att läsa raderna med "normala" markeringar. Det fungerar bara om varje process som kommer åt den tabellen använder samma mönster för att erhålla låsen.