From e86aceb385acbe41e7fd4e517693bf8b438a9d73 Mon Sep 17 00:00:00 2001 From: jian he Date: Mon, 22 Jun 2026 16:26:18 +0800 Subject: [PATCH v1 1/1] fix enum_in cache lookup failed ERROR discussion: https://postgr.es/m/ --- src/backend/utils/adt/enum.c | 4 ++-- src/test/regress/expected/enum.out | 8 ++++++++ src/test/regress/sql/enum.sql | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/enum.c b/src/backend/utils/adt/enum.c index 286d4311ed5..c662faf079a 100644 --- a/src/backend/utils/adt/enum.c +++ b/src/backend/utils/adt/enum.c @@ -119,7 +119,7 @@ enum_in(PG_FUNCTION_ARGS) ereturn(escontext, (Datum) 0, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input value for enum %s: \"%s\"", - format_type_be(enumtypoid), + format_type_extended(enumtypoid, -1, FORMAT_TYPE_ALLOW_INVALID), name))); tup = SearchSysCache2(ENUMTYPOIDNAME, @@ -129,7 +129,7 @@ enum_in(PG_FUNCTION_ARGS) ereturn(escontext, (Datum) 0, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), errmsg("invalid input value for enum %s: \"%s\"", - format_type_be(enumtypoid), + format_type_extended(enumtypoid, -1, FORMAT_TYPE_ALLOW_INVALID), name))); /* diff --git a/src/test/regress/expected/enum.out b/src/test/regress/expected/enum.out index 990ce66c7bb..0801afebdc0 100644 --- a/src/test/regress/expected/enum.out +++ b/src/test/regress/expected/enum.out @@ -24,6 +24,14 @@ SELECT 'mauve'::rainbow; ERROR: invalid input value for enum rainbow: "mauve" LINE 1: SELECT 'mauve'::rainbow; ^ +SELECT enum_in('red', -1); -- error +ERROR: invalid input value for enum ???: "red" +SELECT enum_in('red', 'rainbow'::regtype); + enum_in +--------- + red +(1 row) + -- Also try it with non-error-throwing API SELECT pg_input_is_valid('red', 'rainbow'); pg_input_is_valid diff --git a/src/test/regress/sql/enum.sql b/src/test/regress/sql/enum.sql index 803ccad6a6b..f6fe2c1a35a 100644 --- a/src/test/regress/sql/enum.sql +++ b/src/test/regress/sql/enum.sql @@ -14,6 +14,8 @@ SELECT COUNT(*) FROM pg_enum WHERE enumtypid = 'rainbow'::regtype; -- SELECT 'red'::rainbow; SELECT 'mauve'::rainbow; +SELECT enum_in('red', -1); -- error +SELECT enum_in('red', 'rainbow'::regtype); -- Also try it with non-error-throwing API SELECT pg_input_is_valid('red', 'rainbow'); -- 2.34.1