Simplify information schema check constraint deparsing
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 22 Sep 2023 05:40:56 +0000 (07:40 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 22 Sep 2023 05:43:26 +0000 (07:43 +0200)
The computation of the column
information_schema.check_constraints.check_clause used
pg_get_constraintdef() plus some string manipulation to get the check
clause back out.  This ended up with an extra pair of parentheses,
which is only an aesthetic problem, but also with suffixes like "NOT
VALID", which don't belong into that column.  We can fix both of these
problems and simplify the code by just using pg_get_expr() instead.

Discussion: https://www.postgresql.org/message-id/799b59ef-3330-f0d2-ee23-8cdfa1740987@eisentraut.org

src/backend/catalog/information_schema.sql
src/include/catalog/catversion.h

index 7f7de91cc24c1e21b16ffd79ac278243a4fdf9dc..10b34c3c5b8f3ea8017348b828b8502a2bdba756 100644 (file)
@@ -435,8 +435,7 @@ CREATE VIEW check_constraints AS
     SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog,
            CAST(rs.nspname AS sql_identifier) AS constraint_schema,
            CAST(con.conname AS sql_identifier) AS constraint_name,
-           CAST(substring(pg_get_constraintdef(con.oid) from 7) AS character_data)
-             AS check_clause
+           CAST(pg_get_expr(con.conbin, coalesce(c.oid, 0)) AS character_data) AS check_clause
     FROM pg_constraint con
            LEFT OUTER JOIN pg_namespace rs ON (rs.oid = con.connamespace)
            LEFT OUTER JOIN pg_class c ON (c.oid = con.conrelid)
index 8799f3f03a4c9f51ce29f0340839c4f69b20c4fc..48be6d137018376761dd8b313c2928fbd38a1143 100644 (file)
@@ -57,6 +57,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 202309181
+#define CATALOG_VERSION_NO 202309221
 
 #endif