From e86aceb385acbe41e7fd4e517693bf8b438a9d73 Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
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

