Nie sądzę, żeby to było możliwe. Nie możesz zablokować dostępu tylko do odczytu do tabeli (chyba że zaznaczenie zostało wykonane FOR UPDATE
)
O ile wiem, jedyną szansą, jaką masz, jest użycie pg_advisory_lock()
funkcjonować.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Wymaga to jednak „ręcznego” zwolnienia uzyskanych dzięki nim zamków. Dzięki temu nie otrzymasz automatycznego odblokowania.
Aby zablokować wiersze, potrzebujesz czegoś takiego:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Zwróć uwagę na użycie tabeli pochodnej dla części LIMIT. Zobacz link do podręcznika, który opublikowałem, aby uzyskać wyjaśnienie)
Następnie musisz zapisać pobrane identyfikatory, a później wywołać pg_advisory_unlock()
dla każdego identyfikatora.
Jeśli każdy proces zawsze zwalnia wszystkie Identyfikatory na raz, możesz po prostu użyć pg_advisory_unlock_all()
zamiast. Wtedy nie będziesz musiał przechowywać pobranych identyfikatorów.
Pamiętaj, że to nie uniemożliwić innym odczytywanie wierszy przy użyciu "normalnych" wyborów. Będzie działać tylko wtedy, gdy każdy proces, który uzyskuje dostęp do tej tabeli, używa tego samego wzorca uzyskiwania blokad.