On Tue, May 21, 2024 at 9:58 AM Pradeep Kumar <spradeepkuma...@gmail.com> wrote:
> If the user tries to open the relation in RangeVar and NoLock mode calling 
> table_openrv(relation, NoLock), it will internally call 
> relation_openrv()-->relation_open(). In relation_open() we checking the 
> Assert(lockmode >= NoLock && lockmode < MAX_LOCKMODES); , here we expecting 
> the lockmode is NoLock or greater than that, but in same function again we 
> checking this assert case Assert(lockmode != NoLock || 
> IsBootstrapProcessingMode() || CheckRelationLockedByMe(r, AccessShareLock, 
> true)); , here we are expecting (lockmode != NoLock) , so why are there two 
> cases that contradict?  and What if the user tries to open the relation in 
> NoLock mode? and that will definitely cause the assert failure, Suppose the 
> user who writes some extension and reads some relation oid that is constant, 
> and wants to acquire NoLock?, need some clarification on this.

You need to acquire a lock. Otherwise, the relcache entry could change
underneath you while you're accessing it, which would result in
PostgreSQL crashing.

-- 
Robert Haas
EDB: http://www.enterprisedb.com


Reply via email to