On Tue, 27 May 2025 08:33:42 +0200 Jim Jones <jim.jo...@uni-muenster.de> wrote:
> Hi Yugo > > On 26.05.25 18:39, Yugo Nagata wrote: > > I can see the error when two concurrent transactions issue > > "alter function f() immutable". > > > I might have missed something in my last tests... I could now reproduce > the behaviour you mentioned. > > I've tested v2 and it works as described. CREATE OR REPLACE FUNCTION and > ALTER TABLE no longer raise an error after the lock by the concurrent > transaction was freed. > > One quick question in v2-002: > > tup = SearchSysCacheCopy1(PROCOID, ObjectIdGetDatum(funcOid)); > - if (!HeapTupleIsValid(tup)) /* should not happen */ > - elog(ERROR, "cache lookup failed for function %u", funcOid); > + if (!HeapTupleIsValid(tup)) > + ereport(ERROR, > + errcode(ERRCODE_UNDEFINED_OBJECT), > + errmsg("function \"%s\" does not exist", > + NameListToString(stmt->func->objname))); > > > Is it really ok to change this error message here? Did the addition of > LockDatabaseObject change the semantics of the previous message? Yes. AcceptInvalidationMessages() is called in LockDatabaseObject() after wait, and this enables the detection of object deletion during the wait. Regards, Yugo Nagata -- Yugo Nagata <nag...@sraoss.co.jp>