Non credo sia possibile. Non è possibile bloccare un accesso di sola lettura a una tabella (a meno che non venga eseguita la selezione FOR UPDATE
)
Per quanto ne so, l'unica possibilità che hai è usare pg_advisory_lock()
funzione.
http://www .postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
Ma ciò richiede uno sblocco "manuale" dei blocchi ottenuti attraverso di essa. Non otterrai uno sblocco automatico con quello.
Per bloccare le righe avresti bisogno di qualcosa del genere:
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
(Nota l'uso della tabella derivata per la parte LIMIT. Vedi il link manuale che ho pubblicato per una spiegazione)
Quindi devi memorizzare gli ID recuperati e successivamente chiamare pg_advisory_unlock()
per ogni ID.
Se ogni processo rilascia sempre tutto ID contemporaneamente, puoi semplicemente usare pg_advisory_unlock_all()
invece. Quindi non sarà necessario memorizzare gli ID recuperati.
Tieni presente che questo non impedire ad altri di leggere le righe utilizzando le selezioni "normali". Funzionerà solo se ogni processo che accede a quella tabella utilizza lo stesso schema per ottenere i blocchi.