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