From d000fabf78f875d484a747859fc9a101735f7d7e Mon Sep 17 00:00:00 2001
From: zengman <2437705447@qq.com>
Date: Thu, 20 Nov 2025 14:29:27 +0800
Subject: [PATCH v5 2/2] Add pg_get_domain_ddl() function to reconstruct CREATE
  DOMAIN statements

---
 src/backend/utils/adt/ruleutils.c        |  5 +++++
 src/test/regress/expected/object_ddl.out | 15 +++++++++++++++
 src/test/regress/sql/object_ddl.sql      |  6 ++++++
 3 files changed, 26 insertions(+)

diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 34d63f2f502..bcd6d69672d 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -13954,6 +13954,11 @@ pg_get_domain_ddl_worker(Oid domain_oid, int prettyFlags)
 		return NULL;
 
 	typForm = (Form_pg_type) GETSTRUCT(typeTuple);
+	if (typForm->typtype != TYPTYPE_DOMAIN)
+	{
+		ReleaseSysCache(typeTuple);
+		return NULL;
+	}
 
 	/* Get default expression */
 	defaultExpr = get_typdefault(domain_oid);
diff --git a/src/test/regress/expected/object_ddl.out b/src/test/regress/expected/object_ddl.out
index 9aad54347da..8ea86bcfc96 100644
--- a/src/test/regress/expected/object_ddl.out
+++ b/src/test/regress/expected/object_ddl.out
@@ -306,6 +306,20 @@ SELECT pg_get_domain_ddl('regress_domain_with_collate', pretty => true);
          COLLATE "C";
 (1 row)
 
+-- Test input is not DOMAIN
+CREATE TABLE domain_test (a int, b int);
+SELECT pg_get_domain_ddl('domain_test');
+ pg_get_domain_ddl 
+-------------------
+ 
+(1 row)
+
+SELECT pg_get_domain_ddl('domain_test', pretty => true);
+ pg_get_domain_ddl 
+-------------------
+ 
+(1 row)
+
 -- Cleanup
 DROP DOMAIN regress_us_postal_code;
 DROP DOMAIN regress_domain_not_null;
@@ -326,3 +340,4 @@ DROP DOMAIN regress_simple_domain;
 DROP DOMAIN regress_domain_not_valid;
 DROP DOMAIN regress_domain_mixed;
 DROP DOMAIN regress_domain_with_collate;
+DROP TABLE domain_test;
diff --git a/src/test/regress/sql/object_ddl.sql b/src/test/regress/sql/object_ddl.sql
index 98fb20017ea..f18d1c4322e 100644
--- a/src/test/regress/sql/object_ddl.sql
+++ b/src/test/regress/sql/object_ddl.sql
@@ -113,6 +113,11 @@ CREATE DOMAIN regress_domain_with_collate AS text COLLATE "C";
 SELECT pg_get_domain_ddl('regress_domain_with_collate');
 SELECT pg_get_domain_ddl('regress_domain_with_collate', pretty => true);
 
+-- Test input is not DOMAIN
+CREATE TABLE domain_test (a int, b int);
+SELECT pg_get_domain_ddl('domain_test');
+SELECT pg_get_domain_ddl('domain_test', pretty => true);
+
 -- Cleanup
 DROP DOMAIN regress_us_postal_code;
 DROP DOMAIN regress_domain_not_null;
@@ -133,3 +138,4 @@ DROP DOMAIN regress_simple_domain;
 DROP DOMAIN regress_domain_not_valid;
 DROP DOMAIN regress_domain_mixed;
 DROP DOMAIN regress_domain_with_collate;
+DROP TABLE domain_test;
-- 
2.43.0

