Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0vOa-002KUE-0a for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 05:49:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0vOW-001phC-3B for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 05:49:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0vOW-001ph4-1y for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 05:49:09 +0000 Received: from mail-vk1-xa2b.google.com ([2607:f8b0:4864:20::a2b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0vOT-00000002Pif-0Q8w for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 05:49:07 +0000 Received: by mail-vk1-xa2b.google.com with SMTP id 71dfb90a1353d-56b255b1dd0so1639446e0c.2 for ; Thu, 12 Mar 2026 22:49:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773380943; cv=none; d=google.com; s=arc-20240605; b=aVaGGIDkxJfo4rP8YIhDaPigjWtXNNC3wymwz8ZJ9rkKY08uwzjFBh3OKgL6xJX57M qhj2pcAMyk+j/allTVsETyRVGkwet7w+9OPMCaQXfmF99w95O4OrbrT9bFm6QUBXmUyw oc4AkzBh5c4og63ar5uupbcin7P20vNHevn5dgZGf5cFwlNIy654vGkMz8rRai5ki9/2 5vEfaj5oCSr/CD2wvflPuZW3QAMQhRhWI6sqhVEVLDDbrsV5o70O9Yn1PiPQxz7Ua+57 hYuXhXvSFY2h9rrbbcaJGuFAKi/653qOy8+0QMNdOnbEABmdxTGLHAFOwhZOtqaBVz2D QHPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=szLhIUgBCV041rtYwK59lWa1muo9R67hC3tVcpF2SQ0=; fh=RmRgdwWE9FINaXaY878laVMi8bPOFYT6BfhogQ/MSH8=; b=f6s66puC7H9itXkG0eU400kXHDgsu4VqrNHkU4/891rna4fLZCUxzkos2x7vUD1/Xi P0SnYkNKwo/bB8xieSezgo6bIXIs0Ww1SccIddEXjxbWB3SsMkBVw76HK1zNAt+rnwhY S9vwGq/iE3nqqiA+8BZ02oHyjgSXNmF8AouDWuKy7ufOlbJpAf8gX6PGzFAt3Gw4b8kv uSduZpCoSEnssvwB9wA24vf/vz58uxGYOtVUGQsKnG8qVLXs8ZTRpS+WjHeLwSnA0/ge gfSyg6KsDW1Xa3hDFgVRkZZOrxtcS0IW56DtjIaMhh6Yh5dSsEhDrpg5Y0xdZ+beejjH PEUQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773380943; x=1773985743; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=szLhIUgBCV041rtYwK59lWa1muo9R67hC3tVcpF2SQ0=; b=g++CLW00AVdEdas6a6kchm8CUcc4LyYKKVI4McBPy90y8ZRm+Ae+Xts88ZhGYJSDWK xcMOTB95XdZUq0vgoDKaAMjuY60X3vLsPii7Lrsgxg5Yoh3T/zdYTVu2rwV3y+CJ7DEB W4CNFVnaK9q3Z4xwUsUek4YcZUDc+926cH4Q5LAFjv0OWEUKgmb95kOb1yPla9xMVhoQ MMGTLg3z4kGuW90k+XtK1viYp640jQqgBw1CAX/b9eqdrX6iX+Kx6+E+aHS/drESmHk3 9BDxNwsszCRTsC6WmaJ3Z4Z1AtVTNoRE+YL6ItS8APYpZtPtaksh21hzilVFGzXAO4cs 9Dag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773380943; x=1773985743; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=szLhIUgBCV041rtYwK59lWa1muo9R67hC3tVcpF2SQ0=; b=sMNZah49jqe3X+ujCP6T2M/69DZ2CFzmTtX2wtQxiNZIZ8L6f3Fao4mLCnfkBhSVIb xgJTmSscAOZ6kxF2D3N8p23epsdCGZ2ghgRoVvWGCNETSx+4TtZG56UqS+zdJPIYoqSF YeLd5Jzdl9p0d8fj8JmGNh4kj2CokOqhGQlIpMVgj4fYetA0eIE1+gtAeJ7tVhrksuFA K8SgT/1QB5/ufVtF/Ck1kU9g8Pkz7Y+RP89XARdlEcaaIYg7wZxC1BZhJsBh/AfdPGW0 mo5Chg5IiHLZD6plZlOyec8x64g14hyRSf8B3s8A9tlmRY60Z7axYJ4HYOfjhU11qQhF Bv9A== X-Forwarded-Encrypted: i=1; AJvYcCWSPA4K2nzUuS2JQc8ET4yrIY2OsqvgryFHoMVlRubAGOvXfhQt8558ivMFEGSR6Ed7e3tXAY/G/C1JsX64@lists.postgresql.org X-Gm-Message-State: AOJu0Yz0GsJqya1khPnZ6Yc2MDPeZpiQA0zjKEtz1C/O2UTep4WKV/7B g5Z3XE4R2OQP+rvZaPAibIHmJbaMOR8QWHS00I1jR7f4c2CcWYLGE2aIXF0QgnUxK7IJ1F3WL5m Su8Pp7hiz/VXsoIY4tqT0kSWii3xvG04= X-Gm-Gg: ATEYQzyszXh52xpvwdqUiLcbxBPUw5IEig6cL7ROYth+SmvZTnhhDndUkmBzYplCrmY AqzCBFu4fozarbUs4rvFNRrzt8bybVXxMtZWPBwDdqpwhWzNNf+8ZkeDktaaYVdEsmMktjykjA4 CVwntnwf6rBcxGLVfDYf9BUqzRcOeoz5aN5jAzL2tEhmrYtcpDyeZZE++JufUk8i4SI6Fnly43N IH9jpNxE71Y6KzAIQY22ZqgYVxSL9IdAV32jZ9ZSOGwKmCdjj+WPuBIU8k01JnIw4Uc5ZyFcDV6 zhtz047lRqiQKgHgIcVE2k5nEdzhPYZVfZYgpx/FPkUY86urFa9ecmJ710GcSg2e9KvkpqS8wyw fLTo/odmh/PTWWKQGLJUV7cZ2rtDm2TpwT66b1tm1D5QdPJ/CqS3wuvuCc+pAOAQMU3RiH7oS+J km5vQV0J81dx96bJg0B6beNQ== X-Received: by 2002:a05:6102:5488:b0:5f5:5c2e:59ba with SMTP id ada2fe7eead31-6020e93d747mr1014716137.33.1773380942823; Thu, 12 Mar 2026 22:49:02 -0700 (PDT) MIME-Version: 1.0 References: <04afcd1f-ed7d-4c0a-add1-50e3719ccbf9@postgresfriends.org> <762ae707-7fdc-43d8-a77a-3a10d12ce21d@postgresfriends.org> In-Reply-To: From: jian he Date: Fri, 13 Mar 2026 13:48:26 +0800 X-Gm-Features: AaiRm534AA9hacSHbSmWzFhcr4HZ9mr4WvIqvibsM8e60G9tCMAqiaxLyUh6QR0 Message-ID: Subject: Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions To: Corey Huinker Cc: Amul Sul , Kirill Reshke , Vik Fearing , Isaac Morland , pgsql-hackers@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Fri, Mar 13, 2026 at 11:59=E2=80=AFAM Corey Huinker wrote: > > Can you explain this bit below? > > @@ -595,13 +605,23 @@ RangeVarGetRelidExtended(const RangeVar *relation, = LOCKMODE lockmode, > { > int elevel =3D (flags & RVR_SKIP_LOCKED) ? DEBUG1 : ERROR; > > - if (relation->schemaname) > - ereport(elevel, > + if (relation->schemaname && elevel =3D=3D DEBUG1) > + ereport(DEBUG1, > (errcode(ERRCODE_LOCK_NOT_AVAILABLE), > errmsg("could not obtain lock on relation \"%s.%s\"", > relation->schemaname, relation->relname))); > - else > - ereport(elevel, > + else if (relation->schemaname && elevel =3D=3D ERROR) > + ereturn(escontext, InvalidOid, > + errcode(ERRCODE_LOCK_NOT_AVAILABLE), > + errmsg("could not obtain lock on relation \"%s.%s\"", > + relation->schemaname, relation->relname)); > + else if (elevel =3D=3D DEBUG1) > + ereport(DEBUG1, > + errcode(ERRCODE_LOCK_NOT_AVAILABLE), > + errmsg("could not obtain lock on relation \"%s\"", > + relation->relname)); > + else if (elevel =3D=3D ERROR) > + ereturn(escontext, InvalidOid, > This is for supporting casting text to regclass error safe, for example: SELECT CAST('abc'::text as regclass default NULL on conversion error); To do that, we need to refactor the RangeVarGetRelidExtended function to make it error-safe. We can also change it as: if (relation->schemaname) { if (elevel =3D=3D DEBUG1) ereport(DEBUG1, (errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on relation \"%s.%s\"", relation->schemaname, relation->relname))); else ereturn(escontext, InvalidOid, errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on relation \"%s.%s\"", relation->schemaname, relation->relname)); } else { if (elevel =3D=3D DEBUG1) ereport(DEBUG1, errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on relation \"%s\"", relation->relname)); else ereturn(escontext, InvalidOid, (errcode(ERRCODE_LOCK_NOT_AVAILABLE), errmsg("could not obtain lock on relation \"%s\"", relation->relname))); }