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