The brackets aren't put on the CHECK constraints properly.
authorBruce Momjian <bruce@momjian.us>
Mon, 29 Sep 2003 18:55:56 +0000 (18:55 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 29 Sep 2003 18:55:56 +0000 (18:55 +0000)
Before patch:

test=# select pg_get_constraintdef(oid) from pg_constraint;
                                       pg_get_constraintdef
-------------------------------------------------------------------------------------------------
  CHECK (VALUE >= 0)
  CHECK ((((a)::text = 'asdf'::text) OR ((a)::text = 'fdsa'::text)) OR
((a)::text = 'dfd'::text))
  PRIMARY KEY (b)
  FOREIGN KEY (a) REFERENCES test2(b)
  UNIQUE (b)
(5 rows)

test=# select pg_get_constraintdef(oid, true) from pg_constraint;
                                pg_get_constraintdef
-----------------------------------------------------------------------------------
  CHECK VALUE >= 0
  CHECK a::text = 'asdf'::text OR a::text = 'fdsa'::text OR a::text =
'dfd'::text
  PRIMARY KEY (b)
  FOREIGN KEY (a) REFERENCES test2(b)
  UNIQUE (b)
(5 rows)

After patch:

test=# select pg_get_constraintdef(oid) from pg_constraint;
                                       pg_get_constraintdef
-------------------------------------------------------------------------------------------------
  CHECK (VALUE >= 0)
  CHECK ((((a)::text = 'asdf'::text) OR ((a)::text = 'fdsa'::text)) OR
((a)::text = 'dfd'::text))
  PRIMARY KEY (b)
  FOREIGN KEY (a) REFERENCES test2(b)
  UNIQUE (b)
(5 rows)

test=# select pg_get_constraintdef(oid, true) from pg_constraint;
                                pg_get_constraintdef
-----------------------------------------------------------------------------------
  CHECK (VALUE >= 0)

`  CHECK (a::text = 'asdf'::text OR a::text = 'fdsa'::text OR a::text =
'dfd'::text)
  PRIMARY KEY (b)
  FOREIGN KEY (a) REFERENCES test2(b)
  UNIQUE (b)
(5 rows)

It's important that those brackets are there to (a) match all other
constraints and (b) so that people can just copy and paste them and it
will work as SQL.

Christopher Kings-Lynne

src/backend/utils/adt/ruleutils.c

index 2a3b7d0f34de83344c9183f6d88abbfa81a904ab..ff4af2c909f261586e8ecc178127811ca3aec337 100644 (file)
@@ -1056,6 +1056,10 @@ pg_get_constraintdef_worker(Oid constraintId, int prettyFlags)
                                 */
                                appendStringInfo(&buf, "CHECK ");
 
+                               /* If we're pretty-printing we need to add brackets */
+                               if (prettyFlags != 0)
+                                       appendStringInfo(&buf, "(");
+
                                /* Fetch constraint source */
                                val = heap_getattr(tup, Anum_pg_constraint_conbin,
                                                                   RelationGetDescr(conDesc), &isnull);
@@ -1094,6 +1098,10 @@ pg_get_constraintdef_worker(Oid constraintId, int prettyFlags)
                                /* Append the constraint source */
                                appendStringInfoString(&buf, consrc);
 
+                               /* If we're pretty-printing we need to add brackets */
+                               if (prettyFlags != 0)
+                                       appendStringInfo(&buf, ")");
+
                                break;
                        }
                default: