public inbox for [email protected]
help / color / mirror / Atom feedFrom: jian he <[email protected]>
To: Tom Lane <[email protected]>
Cc: PostgreSQL-development <[email protected]>
Subject: Re: ERROR: failed to find conversion function from unknown to text
Date: Wed, 22 Apr 2026 14:33:01 +0800
Message-ID: <CACJufxF7iSeRF2+bprERSwBe5zShVch1EJK-KcxQCcLT-UHBbg@mail.gmail.com> (raw)
In-Reply-To: <CACJufxGEpQiMUOFcw5G67sNqgdyXxB7h-mpA_6neqNRf4qov=g@mail.gmail.com>
References: <CACJufxHu0sXO8791FDcNXp2bFnE89jyuGkJbLCQkhgWq6XuNLg@mail.gmail.com>
<[email protected]>
<CACJufxGEpQiMUOFcw5G67sNqgdyXxB7h-mpA_6neqNRf4qov=g@mail.gmail.com>
On Thu, Jan 29, 2026 at 11:53 AM jian he <[email protected]> wrote:
>
> To make it an error, meaning it's not possible to coerce to the unknown type.
> We can do it in the function find_coercion_pathway, just
> after the ``if (sourceTypeId == targetTypeId)`` check:
>
> if (targetTypeId == UNKNOWNOID)
> return COERCION_PATH_NONE;
>
> it's also doable in the function can_coerce_type,
> right after the ``if (inputTypeId == UNKNOWNOID)``:
>
> if (targetTypeId == UNKNOWNOID)
> return false;
I choose to disallow UNKNOWN target types in find_coercion_pathway.
do $$ declare a int;
begin a := '1'::text::unknown;
end$$;
This DO statement does not cause any error in the HEAD, because of
function find_coercion_pathway:
```
/*
* When parsing PL/pgSQL assignments, allow an I/O cast to be used
* whenever no normal coercion is available.
*/
if (result == COERCION_PATH_NONE &&
ccontext == COERCION_PLPGSQL)
result = COERCION_PATH_COERCEVIAIO;
```
but will result error with the attached V2:
ERROR: cannot cast type text to unknown
--
jian
https://www.enterprisedb.com/
Attachments:
[text/x-patch] v2-0001-Disallow-UNKNOWN-target-types.patch (2.2K, 2-v2-0001-Disallow-UNKNOWN-target-types.patch)
download | inline diff:
From 9f3d8471db578d63729064d117ca2fed1abec112 Mon Sep 17 00:00:00 2001
From: jian he <[email protected]>
Date: Wed, 22 Apr 2026 14:12:25 +0800
Subject: [PATCH v2 1/1] Disallow UNKNOWN target types
discussion: https://postgr.es/m/CACJufxHu0sXO8791FDcNXp2bFnE89jyuGkJbLCQkhgWq6XuNLg@mail.gmail.com
commitfest entry: https://commitfest.postgresql.org/patch/
---
src/backend/parser/parse_coerce.c | 4 ++++
src/test/regress/expected/misc.out | 12 ++++++++++++
src/test/regress/sql/misc.sql | 6 ++++++
3 files changed, 22 insertions(+)
diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index 913ca53666f..aec75612ca1 100644
--- a/src/backend/parser/parse_coerce.c
+++ b/src/backend/parser/parse_coerce.c
@@ -3166,6 +3166,10 @@ find_coercion_pathway(Oid targetTypeId, Oid sourceTypeId,
if (OidIsValid(targetTypeId))
targetTypeId = getBaseType(targetTypeId);
+ /* Disallow UNKNOWN target types. */
+ if (targetTypeId == UNKNOWNOID)
+ return COERCION_PATH_NONE;
+
/* Domains are always coercible to and from their base type */
if (sourceTypeId == targetTypeId)
return COERCION_PATH_RELABELTYPE;
diff --git a/src/test/regress/expected/misc.out b/src/test/regress/expected/misc.out
index 6e816c57f1f..1c6ae0a3bbc 100644
--- a/src/test/regress/expected/misc.out
+++ b/src/test/regress/expected/misc.out
@@ -396,3 +396,15 @@ SELECT *, (equipment(CAST((h.*) AS hobbies_r))).name FROM hobbies_r h;
--
-- rewrite rules
--
+do $$ declare a text;
+begin a := 's'::text::unknown;
+end$$;
+ERROR: cannot cast type text to unknown
+LINE 1: a := 's'::text::unknown
+ ^
+QUERY: a := 's'::text::unknown
+CONTEXT: PL/pgSQL function inline_code_block line 2 at assignment
+select 's'::text::unknown;
+ERROR: cannot cast type text to unknown
+LINE 1: select 's'::text::unknown;
+ ^
diff --git a/src/test/regress/sql/misc.sql b/src/test/regress/sql/misc.sql
index 165a2e175fb..c568b4239f8 100644
--- a/src/test/regress/sql/misc.sql
+++ b/src/test/regress/sql/misc.sql
@@ -273,3 +273,9 @@ SELECT *, (equipment(CAST((h.*) AS hobbies_r))).name FROM hobbies_r h;
--
-- rewrite rules
--
+
+do $$ declare a text;
+begin a := 's'::text::unknown;
+end$$;
+
+select 's'::text::unknown;
--
2.34.1
view thread (17+ messages)
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: ERROR: failed to find conversion function from unknown to text
In-Reply-To: <CACJufxF7iSeRF2+bprERSwBe5zShVch1EJK-KcxQCcLT-UHBbg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox