v2-0001-Disallow-UNKNOWN-target-types.patch
text/x-patch
Filename: v2-0001-Disallow-UNKNOWN-target-types.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0001
Subject: Disallow UNKNOWN target types
| File | + | − |
|---|---|---|
| src/backend/parser/parse_coerce.c | 4 | 0 |
| src/test/regress/expected/misc.out | 12 | 0 |
| src/test/regress/sql/misc.sql | 6 | 0 |
From 9f3d8471db578d63729064d117ca2fed1abec112 Mon Sep 17 00:00:00 2001 From: jian he <jian.universality@gmail.com> 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