From: | Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp> |
---|---|
To: | Jim Jones <jim(dot)jones(at)uni-muenster(dot)de> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Prevent internal error at concurrent CREATE OR REPLACE FUNCTION |
Date: | 2025-05-27 08:52:40 |
Message-ID: | 20250527175240.14375b86fca1cea40d1b0961@sraoss.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, 27 May 2025 08:33:42 +0200
Jim Jones <jim(dot)jones(at)uni-muenster(dot)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 <nagata(at)sraoss(dot)co(dot)jp>
From | Date | Subject | |
---|---|---|---|
Next Message | Nikolay Samokhvalov | 2025-05-27 09:08:53 | Support specifying compression level in wal_compression |
Previous Message | Michael Paquier | 2025-05-27 07:14:47 | Re: Add pg_get_injection_points() for information of injection points |