public inbox for [email protected]
help / color / mirror / Atom feed[PATCH 2/8] Pass all scan keys to BRIN consistent function at once
2+ messages / 2 participants
[nested] [flat]
* [PATCH 2/8] Pass all scan keys to BRIN consistent function at once
@ 2020-09-12 13:07 Tomas Vondra <[email protected]>
0 siblings, 0 replies; 2+ messages in thread
From: Tomas Vondra @ 2020-09-12 13:07 UTC (permalink / raw)
Passing all scan keys to the BRIN consistent function at once may allow
elimination of additional ranges, which would be impossible when only
passing individual scan keys.
The code continues to support both the original (one scan key at a time)
and new (all scan keys at once) approaches, depending on whether the
consistent function accepts three or four arguments.
Author: Tomas Vondra <[email protected]>
Reviewed-by: Alvaro Herrera <[email protected]>
Reviewed-by: Mark Dilger <[email protected]>
Reviewed-by: Alexander Korotkov <[email protected]>
Discussion: https://postgr.es/m/[email protected]
---
src/backend/access/brin/brin.c | 158 +++++++++++++++++++-----
src/backend/access/brin/brin_validate.c | 4 +-
2 files changed, 126 insertions(+), 36 deletions(-)
diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c
index 27ba596c6e..f9a0476024 100644
--- a/src/backend/access/brin/brin.c
+++ b/src/backend/access/brin/brin.c
@@ -390,6 +390,9 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
BrinMemTuple *dtup;
BrinTuple *btup = NULL;
Size btupsz = 0;
+ ScanKey **keys;
+ int *nkeys;
+ int keyno;
opaque = (BrinOpaque *) scan->opaque;
bdesc = opaque->bo_bdesc;
@@ -411,6 +414,66 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
*/
consistentFn = palloc0(sizeof(FmgrInfo) * bdesc->bd_tupdesc->natts);
+ /*
+ * Make room for per-attribute lists of scan keys that we'll pass to the
+ * consistent support procedure. We allocate space for all attributes, so
+ * that we don't have to bother determining which attributes are used.
+ *
+ * XXX The widest table can have ~1600 attributes, so this may allocate a
+ * couple kilobytes of memory). We could invent a more compact approach
+ * (with just space for used attributes) but that would make the matching
+ * more complicated, so it may not be a win.
+ */
+ keys = palloc0(sizeof(ScanKey *) * bdesc->bd_tupdesc->natts);
+ nkeys = palloc0(sizeof(int) * bdesc->bd_tupdesc->natts);
+
+ /*
+ * Preprocess the scan keys - split them into per-attribute arrays.
+ */
+ for (keyno = 0; keyno < scan->numberOfKeys; keyno++)
+ {
+ ScanKey key = &scan->keyData[keyno];
+ AttrNumber keyattno = key->sk_attno;
+
+ /*
+ * The collation of the scan key must match the collation used in the
+ * index column (but only if the search is not IS NULL/ IS NOT NULL).
+ * Otherwise we shouldn't be using this index ...
+ */
+ Assert((key->sk_flags & SK_ISNULL) ||
+ (key->sk_collation ==
+ TupleDescAttr(bdesc->bd_tupdesc,
+ keyattno - 1)->attcollation));
+
+ /* First time we see this index attribute, so init as needed. */
+ if (!keys[keyattno - 1])
+ {
+ FmgrInfo *tmp;
+
+ /*
+ * This is a bit of an overkill - we don't know how many scan keys
+ * are there for this attribute, so we simply allocate the largest
+ * number possible. This may waste a bit of memory, but we only
+ * expect small number of scan keys in general, so this should be
+ * negligible, and it's cheaper than having to repalloc
+ * repeatedly.
+ */
+ keys[keyattno - 1] = palloc0(sizeof(ScanKey) * scan->numberOfKeys);
+
+ /* First time this column, so look up consistent function */
+ Assert(consistentFn[keyattno - 1].fn_oid == InvalidOid);
+
+ tmp = index_getprocinfo(idxRel, keyattno,
+ BRIN_PROCNUM_CONSISTENT);
+ fmgr_info_copy(&consistentFn[keyattno - 1], tmp,
+ CurrentMemoryContext);
+ }
+
+ /* Add key to the per-attribute array. */
+ keys[keyattno - 1][nkeys[keyattno - 1]] = key;
+ nkeys[keyattno - 1]++;
+ }
+
/* allocate an initial in-memory tuple, out of the per-range memcxt */
dtup = brin_new_memtuple(bdesc);
@@ -471,7 +534,7 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
}
else
{
- int keyno;
+ int attno;
/*
* Compare scan keys with summary values stored for the range.
@@ -481,51 +544,78 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
* no keys.
*/
addrange = true;
- for (keyno = 0; keyno < scan->numberOfKeys; keyno++)
+ for (attno = 1; attno <= bdesc->bd_tupdesc->natts; attno++)
{
- ScanKey key = &scan->keyData[keyno];
- AttrNumber keyattno = key->sk_attno;
- BrinValues *bval = &dtup->bt_columns[keyattno - 1];
+ BrinValues *bval;
Datum add;
- /*
- * The collation of the scan key must match the collation
- * used in the index column (but only if the search is not
- * IS NULL/ IS NOT NULL). Otherwise we shouldn't be using
- * this index ...
- */
- Assert((key->sk_flags & SK_ISNULL) ||
- (key->sk_collation ==
- TupleDescAttr(bdesc->bd_tupdesc,
- keyattno - 1)->attcollation));
+ /* skip attributes without any scan keys */
+ if (nkeys[attno - 1] == 0)
+ continue;
- /* First time this column? look up consistent function */
- if (consistentFn[keyattno - 1].fn_oid == InvalidOid)
- {
- FmgrInfo *tmp;
+ bval = &dtup->bt_columns[attno - 1];
- tmp = index_getprocinfo(idxRel, keyattno,
- BRIN_PROCNUM_CONSISTENT);
- fmgr_info_copy(&consistentFn[keyattno - 1], tmp,
- CurrentMemoryContext);
- }
+ Assert((nkeys[attno - 1] > 0) &&
+ (nkeys[attno - 1] <= scan->numberOfKeys));
/*
* Check whether the scan key is consistent with the page
* range values; if so, have the pages in the range added
* to the output bitmap.
*
- * When there are multiple scan keys, failure to meet the
- * criteria for a single one of them is enough to discard
- * the range as a whole, so break out of the loop as soon
- * as a false return value is obtained.
+ * The opclass may or may not support processing of
+ * multiple scan keys. We can determine that based on the
+ * number of arguments - functions with extra parameter
+ * (number of scan keys) do support this, otherwise we
+ * have to simply pass the scan keys one by one, as
+ * before.
*/
- add = FunctionCall3Coll(&consistentFn[keyattno - 1],
- key->sk_collation,
- PointerGetDatum(bdesc),
- PointerGetDatum(bval),
- PointerGetDatum(key));
- addrange = DatumGetBool(add);
+ if (consistentFn[attno - 1].fn_nargs >= 4)
+ {
+ Oid collation;
+
+ /*
+ * Collation from the first key (has to be the same
+ * for all keys for the same attribue).
+ */
+ collation = keys[attno - 1][0]->sk_collation;
+
+ /* Check all keys at once */
+ add = FunctionCall4Coll(&consistentFn[attno - 1],
+ collation,
+ PointerGetDatum(bdesc),
+ PointerGetDatum(bval),
+ PointerGetDatum(keys[attno - 1]),
+ Int32GetDatum(nkeys[attno - 1]));
+ addrange = DatumGetBool(add);
+ }
+ else
+ {
+ /*
+ * Check keys one by one
+ *
+ * When there are multiple scan keys, failure to meet
+ * the criteria for a single one of them is enough to
+ * discard the range as a whole, so break out of the
+ * loop as soon as a false return value is obtained.
+ */
+ int keyno;
+
+ for (keyno = 0; keyno < nkeys[attno - 1]; keyno++)
+ {
+ add = FunctionCall3Coll(&consistentFn[attno - 1],
+ keys[attno - 1][keyno]->sk_collation,
+ PointerGetDatum(bdesc),
+ PointerGetDatum(bval),
+ PointerGetDatum(keys[attno - 1][keyno]));
+ addrange = DatumGetBool(add);
+
+ /* mismatching key, no need to look further */
+ if (!addrange)
+ break;
+ }
+ }
+
if (!addrange)
break;
}
diff --git a/src/backend/access/brin/brin_validate.c b/src/backend/access/brin/brin_validate.c
index 6d4253c05e..11835d85cd 100644
--- a/src/backend/access/brin/brin_validate.c
+++ b/src/backend/access/brin/brin_validate.c
@@ -97,8 +97,8 @@ brinvalidate(Oid opclassoid)
break;
case BRIN_PROCNUM_CONSISTENT:
ok = check_amproc_signature(procform->amproc, BOOLOID, true,
- 3, 3, INTERNALOID, INTERNALOID,
- INTERNALOID);
+ 3, 4, INTERNALOID, INTERNALOID,
+ INTERNALOID, INT4OID);
break;
case BRIN_PROCNUM_UNION:
ok = check_amproc_signature(procform->amproc, BOOLOID, true,
--
2.26.2
--------------82D677E9F94AC7574E460205
Content-Type: text/x-patch; charset=UTF-8;
name="0003-Process-all-scan-keys-in-existing-BRIN-opcl-20210308.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename*0="0003-Process-all-scan-keys-in-existing-BRIN-opcl-20210308.pa";
filename*1="tch"
^ permalink raw reply [nested|flat] 2+ messages in thread
* information_schema and not-null constraints
@ 2023-09-04 17:10 Alvaro Herrera <[email protected]>
0 siblings, 0 replies; 2+ messages in thread
From: Alvaro Herrera @ 2023-09-04 17:10 UTC (permalink / raw)
To: Pg Hackers <[email protected]>; +Cc: Peter Eisentraut <[email protected]>
In reference to [1], 0001 attached to this email contains the updated
view definitions that I propose.
In 0002, I took the tests added by Peter's proposed patch and put them
in a separate test file that runs at the end. There are some issues,
however. One is that the ORDER BY clause in the check_constraints view
is not fully deterministic, because the table name is not part of the
view definition, so we cannot sort by table name. In the current
regression database there is only one case[2] where two constraints have
the same name and different definition:
inh_check_constraint │ 2 │ ((f1 > 0)) NOT VALID ↵
│ │ ((f1 > 0))
(on tables invalid_check_con and invalid_check_con_child). I assume
this is going to bite us at some point. We could just add a WHERE
clause to omit that one constraint.
Another issue I notice eyeballing at the results is that foreign keys on
partitioned tables are listing the rows used to implement the
constraints on partitions, which are sort-of "internal" constraints (and
are not displayed by psql's \d). I hope this is a relatively simple fix
that we could extract from the code used by psql.
Anyway, I think I'm going to get 0001 committed sometime tomorrow, and
then play a bit more with 0002 to try and get it pushed soon also.
Thanks
[1] https://postgr.es/m/[email protected]
[2]
select constraint_name, count(*),
string_agg(distinct check_clause, E'\n')
from information_schema.check_constraints
group by constraint_name
having count(*) > 1;
--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"You don't solve a bad join with SELECT DISTINCT" #CupsOfFail
https://twitter.com/connor_mc_d/status/1431240081726115845
Attachments:
[text/x-diff] v2-0001-update-information_schema-definition.patch (5.2K, ../../[email protected]/2-v2-0001-update-information_schema-definition.patch)
download | inline diff:
From d8a5f8103934fe65a83a2ca44f6af72449cb6aa9 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <[email protected]>
Date: Mon, 4 Sep 2023 18:05:50 +0200
Subject: [PATCH v2 1/2] update information_schema definition
---
src/backend/catalog/information_schema.sql | 74 ++++++++--------------
1 file changed, 27 insertions(+), 47 deletions(-)
diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql
index a06ec7a0a8..c402cca7f4 100644
--- a/src/backend/catalog/information_schema.sql
+++ b/src/backend/catalog/information_schema.sql
@@ -444,22 +444,19 @@ CREATE VIEW check_constraints AS
WHERE pg_has_role(coalesce(c.relowner, t.typowner), 'USAGE')
AND con.contype = 'c'
- UNION
+ UNION ALL
-- not-null constraints
-
- SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog,
- CAST(n.nspname AS sql_identifier) AS constraint_schema,
- CAST(CAST(n.oid AS text) || '_' || CAST(r.oid AS text) || '_' || CAST(a.attnum AS text) || '_not_null' AS sql_identifier) AS constraint_name, -- XXX
- CAST(a.attname || ' IS NOT NULL' AS character_data)
- AS check_clause
- FROM pg_namespace n, pg_class r, pg_attribute a
- WHERE n.oid = r.relnamespace
- AND r.oid = a.attrelid
- AND a.attnum > 0
- AND NOT a.attisdropped
- AND a.attnotnull
- AND r.relkind IN ('r', 'p')
- AND pg_has_role(r.relowner, 'USAGE');
+ SELECT current_database()::information_schema.sql_identifier AS constraint_catalog,
+ rs.nspname::information_schema.sql_identifier AS constraint_schema,
+ con.conname::information_schema.sql_identifier AS constraint_name,
+ format('CHECK (%s IS NOT NULL)', at.attname)::information_schema.character_data AS check_clause
+ FROM pg_constraint con
+ LEFT JOIN pg_namespace rs ON rs.oid = con.connamespace
+ LEFT JOIN pg_class c ON c.oid = con.conrelid
+ LEFT JOIN pg_type t ON t.oid = con.contypid
+ LEFT JOIN pg_attribute at ON (con.conrelid = at.attrelid AND con.conkey[1] = at.attnum)
+ WHERE pg_has_role(coalesce(c.relowner, t.typowner), 'USAGE'::text)
+ AND con.contype = 'n';
GRANT SELECT ON check_constraints TO PUBLIC;
@@ -826,6 +823,20 @@ CREATE VIEW constraint_column_usage AS
AND r.relkind IN ('r', 'p')
AND NOT a.attisdropped
+ UNION ALL
+
+ /* not-null constraints */
+ SELECT DISTINCT nr.nspname, r.relname, r.relowner, a.attname, nc.nspname, c.conname
+ FROM pg_namespace nr, pg_class r, pg_attribute a, pg_namespace nc, pg_constraint c
+ WHERE nr.oid = r.relnamespace
+ AND r.oid = a.attrelid
+ AND r.oid = c.conrelid
+ AND a.attnum = c.conkey[1]
+ AND c.connamespace = nc.oid
+ AND c.contype = 'n'
+ AND r.relkind in ('r', 'p')
+ AND not a.attisdropped
+
UNION ALL
/* unique/primary key/foreign key constraints */
@@ -1828,6 +1839,7 @@ CREATE VIEW table_constraints AS
CAST(r.relname AS sql_identifier) AS table_name,
CAST(
CASE c.contype WHEN 'c' THEN 'CHECK'
+ WHEN 'n' THEN 'CHECK'
WHEN 'f' THEN 'FOREIGN KEY'
WHEN 'p' THEN 'PRIMARY KEY'
WHEN 'u' THEN 'UNIQUE' END
@@ -1852,38 +1864,6 @@ CREATE VIEW table_constraints AS
AND c.contype NOT IN ('t', 'x') -- ignore nonstandard constraints
AND r.relkind IN ('r', 'p')
AND (NOT pg_is_other_temp_schema(nr.oid))
- AND (pg_has_role(r.relowner, 'USAGE')
- -- SELECT privilege omitted, per SQL standard
- OR has_table_privilege(r.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER')
- OR has_any_column_privilege(r.oid, 'INSERT, UPDATE, REFERENCES') )
-
- UNION ALL
-
- -- not-null constraints
-
- SELECT CAST(current_database() AS sql_identifier) AS constraint_catalog,
- CAST(nr.nspname AS sql_identifier) AS constraint_schema,
- CAST(CAST(nr.oid AS text) || '_' || CAST(r.oid AS text) || '_' || CAST(a.attnum AS text) || '_not_null' AS sql_identifier) AS constraint_name, -- XXX
- CAST(current_database() AS sql_identifier) AS table_catalog,
- CAST(nr.nspname AS sql_identifier) AS table_schema,
- CAST(r.relname AS sql_identifier) AS table_name,
- CAST('CHECK' AS character_data) AS constraint_type,
- CAST('NO' AS yes_or_no) AS is_deferrable,
- CAST('NO' AS yes_or_no) AS initially_deferred,
- CAST('YES' AS yes_or_no) AS enforced,
- CAST(NULL AS yes_or_no) AS nulls_distinct
-
- FROM pg_namespace nr,
- pg_class r,
- pg_attribute a
-
- WHERE nr.oid = r.relnamespace
- AND r.oid = a.attrelid
- AND a.attnotnull
- AND a.attnum > 0
- AND NOT a.attisdropped
- AND r.relkind IN ('r', 'p')
- AND (NOT pg_is_other_temp_schema(nr.oid))
AND (pg_has_role(r.relowner, 'USAGE')
-- SELECT privilege omitted, per SQL standard
OR has_table_privilege(r.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER')
--
2.39.2
[text/x-diff] v2-0002-add-information_schema-test.patch (115.2K, ../../[email protected]/3-v2-0002-add-information_schema-test.patch)
download | inline diff:
From b0c39ecaf6c4a1179d45fa9de7876b173c92d6ca Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <[email protected]>
Date: Mon, 4 Sep 2023 18:05:33 +0200
Subject: [PATCH v2 2/2] add information_schema test
---
.../regress/expected/information_schema.out | 691 ++++++++++++++++++
src/test/regress/parallel_schedule | 5 +-
src/test/regress/sql/information_schema.sql | 41 ++
3 files changed, 735 insertions(+), 2 deletions(-)
create mode 100644 src/test/regress/expected/information_schema.out
create mode 100644 src/test/regress/sql/information_schema.sql
diff --git a/src/test/regress/expected/information_schema.out b/src/test/regress/expected/information_schema.out
new file mode 100644
index 0000000000..0b7b93eb69
--- /dev/null
+++ b/src/test/regress/expected/information_schema.out
@@ -0,0 +1,691 @@
+-- We test the information schema last, so that we examine
+-- database state at the end of the regression test run.
+--
+-- Table constraints
+--
+SELECT * FROM information_schema.check_constraints
+ WHERE constraint_schema = 'public'
+ ORDER BY constraint_name;
+ constraint_catalog | constraint_schema | constraint_name | check_clause
+--------------------+-------------------+--------------------------------------------+-----------------------------------------------------------------------
+ regression | public | atnotnull1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | atnotnull1_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | bar1_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | bar2_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | blocal | (((b)::double precision < (1000)::double precision))
+ regression | public | bmerged | (((b)::double precision > (1)::double precision))
+ regression | public | bmerged | (((b)::double precision > (1)::double precision))
+ regression | public | bnoinherit | (((b)::double precision > (100)::double precision)) NO INHERIT
+ regression | public | boolvalues_value_not_null | CHECK (value IS NOT NULL)
+ regression | public | brinopers_bloom_check | ((cardinality(op) = cardinality(value)))
+ regression | public | brinopers_bloom_check1 | ((cardinality(op) = cardinality(matches)))
+ regression | public | brinopers_check | ((cardinality(op) = cardinality(value)))
+ regression | public | brinopers_check1 | ((cardinality(op) = cardinality(matches)))
+ regression | public | brinopers_multi_check | ((cardinality(op) = cardinality(value)))
+ regression | public | brinopers_multi_check1 | ((cardinality(op) = cardinality(matches)))
+ regression | public | cc1_f1_not_null | CHECK (f1 IS NOT NULL)
+ regression | public | cc1_f1_not_null | CHECK (f1 IS NOT NULL)
+ regression | public | check_b | (((b IS NULL) OR (b = 'a'::bpchar)))
+ regression | public | check_con | ((x > 3))
+ regression | public | check_con_tbl_check | (check_con_function(check_con_tbl.*))
+ regression | public | chk | ((b < 50)) NOT VALID
+ regression | public | clstr_tst_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | clstr_tst_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | clstr_tst_s_rf_a_not_null | CHECK (rf_a IS NOT NULL)
+ regression | public | cnn_child2_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | cnn_child2_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | cnn_child_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | cnn_grandchild_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | cnn_grandchild_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | comment_test_positive_col_check | ((positive_col > 0))
+ regression | public | con_check | ((VALUE > 0))
+ regression | public | copy_con | (((x > 3) AND (y <> 'check failed'::text) AND (x < 7)))
+ regression | public | customer_name_not_null | CHECK (name IS NOT NULL)
+ regression | public | foo | ((xx = 'text'::text))
+ regression | public | gtest1_1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | gtest1_y_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | gtest20_b_check | ((b < 50))
+ regression | public | gtest21a_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | gtest_child3_f1_not_null | CHECK (f1 IS NOT NULL)
+ regression | public | gtest_parent_f1_not_null | CHECK (f1 IS NOT NULL)
+ regression | public | gtest_parent_f1_not_null | CHECK (f1 IS NOT NULL)
+ regression | public | gtest_parent_f1_not_null | CHECK (f1 IS NOT NULL)
+ regression | public | gtestdomain1_check | ((VALUE < 10))
+ regression | public | gtestx_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | gtestxx_1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | gtestxx_3_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | gtestxx_4_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | inh_check_constraint | ((f1 > 0)) NOT VALID
+ regression | public | inh_check_constraint | ((f1 > 0))
+ regression | public | insert_tbl_check | (((x + z) = 0))
+ regression | public | insert_tbl_con | (((x >= 3) AND (y <> 'check failed'::text) AND (x < 8)))
+ regression | public | itest10_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest11_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest13_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | itest13_c_not_null | CHECK (c IS NOT NULL)
+ regression | public | itest14_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | itest1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest2_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest3_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest3_c_not_null | CHECK (c IS NOT NULL)
+ regression | public | itest5_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest6_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest7_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest7_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest7c_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest7d_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest7d_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | itest9_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | list_parted2_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | meow | ((VALUE < 11))
+ regression | public | mlparted11_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | mlparted1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | mlparted1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | mlparted1_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | mlparted1_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | mlparted1_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | mlparted2_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | mlparted2_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | mlparted4_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | mvtest_t_amt_not_null | CHECK (amt IS NOT NULL)
+ regression | public | mvtest_t_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | mvtest_t_type_not_null | CHECK (type IS NOT NULL)
+ regression | public | notnull_tbl3_a_check | ((a IS NOT NULL))
+ regression | public | nv_child_2009_d_check | (((d >= '01-01-2009'::date) AND (d <= '12-31-2009'::date)))
+ regression | public | nv_child_2010_d_check | (((d >= '01-01-2010'::date) AND (d <= '12-31-2010'::date))) NOT VALID
+ regression | public | nv_child_2011_d_check | (((d >= '01-01-2011'::date) AND (d <= '12-31-2011'::date)))
+ regression | public | nv_parent_check | (false) NO INHERIT
+ regression | public | nv_parent_d_check | (((d >= '01-01-2001'::date) AND (d <= '12-31-2099'::date))) NOT VALID
+ regression | public | nv_parent_d_check | (((d >= '01-01-2001'::date) AND (d <= '12-31-2099'::date))) NOT VALID
+ regression | public | nv_parent_d_check | (((d >= '01-01-2001'::date) AND (d <= '12-31-2099'::date))) NOT VALID
+ regression | public | nv_parent_d_check | (((d >= '01-01-2001'::date) AND (d <= '12-31-2099'::date))) NOT VALID
+ regression | public | orderedpair_check | (((VALUE)[1] < (VALUE)[2]))
+ regression | public | part1_a_check | ((a = 1))
+ regression | public | part1_a_not_null | CHECK (a IS NOT NULL)
+ regression | public | part1_b_check | (((b >= 1) AND (b <= 10)))
+ regression | public | part1_b_not_null | CHECK (b IS NOT NULL)
+ regression | public | part1_self_fk_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | part33_self_fk_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | part3_self_fk_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | part3_self_fk_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | part_rp100_a_check | (((a >= 123) AND (a < 133) AND (a IS NOT NULL)))
+ regression | public | part_rp_a_check | (((a IS NOT NULL) AND (a >= 0) AND (a < 100)))
+ regression | public | parted_self_fk_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | parted_self_fk_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | persons3_name_not_null | CHECK (name IS NOT NULL)
+ regression | public | plpgsql_arr_domain_check | (plpgsql_arr_domain_check(VALUE))
+ regression | public | plpgsql_domain_check | (plpgsql_domain_check(VALUE))
+ regression | public | pos_int_check | ((VALUE > 0))
+ regression | public | reservations_room_id_not_null | CHECK (room_id IS NOT NULL)
+ regression | public | rules_log_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | sequence_con | (((x > 3) AND (y <> 'check failed'::text) AND (z < 8)))
+ regression | public | sorted | (((VALUE)[1] < (VALUE)[2]))
+ regression | public | spgist_box_tbl_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | spgist_unlogged_tbl_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | str_domain2_check | ((VALUE <> 'foo'::text))
+ regression | public | test_inh_check_a_check | (((a)::double precision > (10.2)::double precision))
+ regression | public | test_inh_check_a_check | (((a)::double precision > (10.2)::double precision))
+ regression | public | transition_table_level1_level1_no_not_null | CHECK (level1_no IS NOT NULL)
+ regression | public | transition_table_level2_level2_no_not_null | CHECK (level2_no IS NOT NULL)
+ regression | public | transition_table_level2_parent_no_not_null | CHECK (parent_no IS NOT NULL)
+ regression | public | transition_table_status_level_not_null | CHECK (level IS NOT NULL)
+ regression | public | transition_table_status_node_no_not_null | CHECK (node_no IS NOT NULL)
+ regression | public | truncate_b_id_not_null | CHECK (id IS NOT NULL)
+ regression | public | tt0_x_not_null | CHECK (x IS NOT NULL)
+ regression | public | tt0_x_not_null | CHECK (x IS NOT NULL)
+(125 rows)
+
+SELECT * FROM information_schema.constraint_column_usage
+ WHERE constraint_schema = 'public'
+ ORDER BY table_name, column_name, constraint_name;
+ table_catalog | table_schema | table_name | column_name | constraint_catalog | constraint_schema | constraint_name
+---------------+--------------+-------------------------------------+--------------+--------------------+-------------------+--------------------------------------------
+ regression | public | alter_table_under_transition_tables | id | regression | public | alter_table_under_transition_tables_pkey
+ regression | public | atnotnull1 | a | regression | public | atnotnull1_a_not_null
+ regression | public | atnotnull1 | b | regression | public | atnotnull1_b_not_null
+ regression | public | atnotnull1 | c | regression | public | atnotnull1_pkey
+ regression | public | bar1 | b | regression | public | bar1_b_not_null
+ regression | public | bar2 | b | regression | public | bar2_b_not_null
+ regression | public | boolvalues | value | regression | public | boolvalues_value_not_null
+ regression | public | brinopers | matches | regression | public | brinopers_check1
+ regression | public | brinopers | op | regression | public | brinopers_check
+ regression | public | brinopers | op | regression | public | brinopers_check1
+ regression | public | brinopers | value | regression | public | brinopers_check
+ regression | public | brinopers_bloom | matches | regression | public | brinopers_bloom_check1
+ regression | public | brinopers_bloom | op | regression | public | brinopers_bloom_check
+ regression | public | brinopers_bloom | op | regression | public | brinopers_bloom_check1
+ regression | public | brinopers_bloom | value | regression | public | brinopers_bloom_check
+ regression | public | brinopers_multi | matches | regression | public | brinopers_multi_check1
+ regression | public | brinopers_multi | op | regression | public | brinopers_multi_check
+ regression | public | brinopers_multi | op | regression | public | brinopers_multi_check1
+ regression | public | brinopers_multi | value | regression | public | brinopers_multi_check
+ regression | public | cc1 | f1 | regression | public | cc1_f1_not_null
+ regression | public | cc2 | f1 | regression | public | cc1_f1_not_null
+ regression | public | check2_tbl | x | regression | public | sequence_con
+ regression | public | check2_tbl | y | regression | public | sequence_con
+ regression | public | check2_tbl | z | regression | public | sequence_con
+ regression | public | check_tbl | x | regression | public | check_con
+ regression | public | clstr_tst | a | regression | public | clstr_tst_a_not_null
+ regression | public | clstr_tst | a | regression | public | clstr_tst_pkey
+ regression | public | clstr_tst_inh | a | regression | public | clstr_tst_a_not_null
+ regression | public | clstr_tst_s | rf_a | regression | public | clstr_tst_con
+ regression | public | clstr_tst_s | rf_a | regression | public | clstr_tst_s_pkey
+ regression | public | clstr_tst_s | rf_a | regression | public | clstr_tst_s_rf_a_not_null
+ regression | public | cnn_child | b | regression | public | cnn_child_b_not_null
+ regression | public | cnn_child2 | a | regression | public | cnn_child2_a_not_null
+ regression | public | cnn_child2 | b | regression | public | cnn_child2_b_not_null
+ regression | public | cnn_grandchild | b | regression | public | cnn_grandchild_b_not_null
+ regression | public | cnn_grandchild2 | b | regression | public | cnn_grandchild_b_not_null
+ regression | public | cnn_parent | b | regression | public | b_uq
+ regression | public | comment_test | id | regression | public | comment_test_child_fk
+ regression | public | comment_test | id | regression | public | comment_test_pk
+ regression | public | comment_test | positive_col | regression | public | comment_test_positive_col_check
+ regression | public | copy_tbl | x | regression | public | copy_con
+ regression | public | copy_tbl | y | regression | public | copy_con
+ regression | public | customer | cid | regression | public | credit_card_cid_fkey
+ regression | public | customer | cid | regression | public | credit_usage_cid_fkey
+ regression | public | customer | cid | regression | public | customer_pkey
+ regression | public | customer | name | regression | public | customer_name_not_null
+ regression | public | delete_test_table | a | regression | public | delete_test_table_pkey
+ regression | public | delete_test_table | b | regression | public | delete_test_table_pkey
+ regression | public | delete_test_table | c | regression | public | delete_test_table_pkey
+ regression | public | delete_test_table | d | regression | public | delete_test_table_pkey
+ regression | public | ec0 | ff | regression | public | ec0_pkey
+ regression | public | ec1 | ff | regression | public | ec1_pkey
+ regression | public | ec2 | xf | regression | public | ec2_pkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_notpartitioned_pk_pkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_4_2_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_4_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_4_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_4_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_5_1_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_5_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_5_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_5_a_b_fkey1
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_5_a_b_fkey1
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | a | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_notpartitioned_pk_pkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_4_2_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_4_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_4_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_4_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_5_1_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_5_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_5_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_5_a_b_fkey1
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_5_a_b_fkey1
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | fk_notpartitioned_pk | b | regression | public | fk_partitioned_fk_a_b_fkey
+ regression | public | gtest0 | a | regression | public | gtest0_pkey
+ regression | public | gtest1 | a | regression | public | gtest1_pkey
+ regression | public | gtest10 | a | regression | public | gtest10_pkey
+ regression | public | gtest10a | a | regression | public | gtest10a_pkey
+ regression | public | gtest1_1 | a | regression | public | gtest1_1_a_not_null
+ regression | public | gtest1_y | a | regression | public | gtest1_y_a_not_null
+ regression | public | gtest2 | a | regression | public | gtest2_pkey
+ regression | public | gtest20 | a | regression | public | gtest20_pkey
+ regression | public | gtest20 | b | regression | public | gtest20_b_check
+ regression | public | gtest20a | a | regression | public | gtest20a_pkey
+ regression | public | gtest20b | a | regression | public | gtest20b_pkey
+ regression | public | gtest20b | b | regression | public | chk
+ regression | public | gtest21a | a | regression | public | gtest21a_pkey
+ regression | public | gtest21a | b | regression | public | gtest21a_b_not_null
+ regression | public | gtest21b | a | regression | public | gtest21b_pkey
+ regression | public | gtest22a | a | regression | public | gtest22a_pkey
+ regression | public | gtest22a | b | regression | public | gtest22a_b_key
+ regression | public | gtest22b | a | regression | public | gtest22b_pkey
+ regression | public | gtest22b | b | regression | public | gtest22b_pkey
+ regression | public | gtest23p | y | regression | public | gtest23p_pkey
+ regression | public | gtest23p | y | regression | public | gtest23q_b_fkey
+ regression | public | gtest23q | a | regression | public | gtest23q_pkey
+ regression | public | gtest24 | a | regression | public | gtest24_pkey
+ regression | public | gtest25 | a | regression | public | gtest25_pkey
+ regression | public | gtest26 | a | regression | public | gtest26_pkey
+ regression | public | gtest_child | f1 | regression | public | gtest_parent_f1_not_null
+ regression | public | gtest_child2 | f1 | regression | public | gtest_parent_f1_not_null
+ regression | public | gtest_child3 | f1 | regression | public | gtest_child3_f1_not_null
+ regression | public | gtest_parent | f1 | regression | public | gtest_parent_f1_not_null
+ regression | public | gtest_tableoid | a | regression | public | gtest_tableoid_pkey
+ regression | public | gtestx | a | regression | public | gtestx_a_not_null
+ regression | public | gtestxx_1 | a | regression | public | gtestxx_1_a_not_null
+ regression | public | gtestxx_3 | a | regression | public | gtestxx_3_a_not_null
+ regression | public | gtestxx_4 | a | regression | public | gtestxx_4_a_not_null
+ regression | public | idxpart_another | a | regression | public | idxpart_another_pkey
+ regression | public | idxpart_another | b | regression | public | idxpart_another_pkey
+ regression | public | idxpart_another_1 | a | regression | public | idxpart_another_1_pkey
+ regression | public | idxpart_another_1 | b | regression | public | idxpart_another_1_pkey
+ regression | public | inh_test | b | regression | public | list_parted2_b_not_null
+ regression | public | inhx | xx | regression | public | foo
+ regression | public | inhx | xx | regression | public | inhx_pkey
+ regression | public | insert_tbl | x | regression | public | insert_tbl_check
+ regression | public | insert_tbl | x | regression | public | insert_tbl_con
+ regression | public | insert_tbl | y | regression | public | insert_tbl_con
+ regression | public | insert_tbl | z | regression | public | insert_tbl_check
+ regression | public | invalid_check_con | f1 | regression | public | inh_check_constraint
+ regression | public | invalid_check_con_child | f1 | regression | public | inh_check_constraint
+ regression | public | itest1 | a | regression | public | itest1_a_not_null
+ regression | public | itest10 | a | regression | public | itest10_a_not_null
+ regression | public | itest11 | a | regression | public | itest11_a_not_null
+ regression | public | itest13 | b | regression | public | itest13_b_not_null
+ regression | public | itest13 | c | regression | public | itest13_c_not_null
+ regression | public | itest14 | id | regression | public | itest14_id_not_null
+ regression | public | itest2 | a | regression | public | itest2_a_not_null
+ regression | public | itest3 | a | regression | public | itest3_a_not_null
+ regression | public | itest3 | c | regression | public | itest3_c_not_null
+ regression | public | itest5 | a | regression | public | itest5_a_not_null
+ regression | public | itest6 | a | regression | public | itest6_a_not_null
+ regression | public | itest7 | a | regression | public | itest7_a_not_null
+ regression | public | itest7a | a | regression | public | itest7_a_not_null
+ regression | public | itest7c | a | regression | public | itest7c_a_not_null
+ regression | public | itest7d | a | regression | public | itest7d_a_not_null
+ regression | public | itest7e | a | regression | public | itest7d_a_not_null
+ regression | public | itest9 | a | regression | public | itest9_a_not_null
+ regression | public | mlparted1 | a | regression | public | mlparted1_a_not_null
+ regression | public | mlparted1 | b | regression | public | mlparted1_b_not_null
+ regression | public | mlparted11 | a | regression | public | mlparted11_a_not_null
+ regression | public | mlparted11 | b | regression | public | mlparted1_b_not_null
+ regression | public | mlparted12 | a | regression | public | mlparted1_a_not_null
+ regression | public | mlparted12 | b | regression | public | mlparted1_b_not_null
+ regression | public | mlparted2 | a | regression | public | mlparted2_a_not_null
+ regression | public | mlparted2 | b | regression | public | mlparted2_b_not_null
+ regression | public | mlparted4 | a | regression | public | mlparted4_a_not_null
+ regression | public | mvtest_t | amt | regression | public | mvtest_t_amt_not_null
+ regression | public | mvtest_t | id | regression | public | mvtest_t_id_not_null
+ regression | public | mvtest_t | id | regression | public | mvtest_t_pkey
+ regression | public | mvtest_t | type | regression | public | mvtest_t_type_not_null
+ regression | public | notnull_tbl2 | a | regression | public | notnull_tbl2_pkey
+ regression | public | notnull_tbl3 | a | regression | public | notnull_tbl3_a_check
+ regression | public | nv_child_2009 | d | regression | public | nv_child_2009_d_check
+ regression | public | nv_child_2009 | d | regression | public | nv_parent_d_check
+ regression | public | nv_child_2010 | d | regression | public | nv_child_2010_d_check
+ regression | public | nv_child_2010 | d | regression | public | nv_parent_d_check
+ regression | public | nv_child_2011 | d | regression | public | nv_child_2011_d_check
+ regression | public | nv_child_2011 | d | regression | public | nv_parent_d_check
+ regression | public | nv_parent | d | regression | public | nv_parent_d_check
+ regression | public | part1_self_fk | id | regression | public | part1_self_fk_id_not_null
+ regression | public | part1_self_fk | id | regression | public | part1_self_fk_pkey
+ regression | public | part2_self_fk | id | regression | public | part2_self_fk_pkey
+ regression | public | part2_self_fk | id | regression | public | parted_self_fk_id_not_null
+ regression | public | part32_self_fk | id | regression | public | part32_self_fk_pkey
+ regression | public | part32_self_fk | id | regression | public | part3_self_fk_id_not_null
+ regression | public | part33_self_fk | id | regression | public | part33_self_fk_id_not_null
+ regression | public | part33_self_fk | id | regression | public | part33_self_fk_pkey
+ regression | public | part3_self_fk | id | regression | public | part3_self_fk_id_not_null
+ regression | public | part3_self_fk | id | regression | public | part3_self_fk_pkey
+ regression | public | part_7_a_null | b | regression | public | check_b
+ regression | public | part_rp | a | regression | public | part_rp_a_check
+ regression | public | part_rp100 | a | regression | public | part_rp100_a_check
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_abc_fkey
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_abc_fkey
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_abc_fkey
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_abc_fkey
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_abc_fkey
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_abc_fkey
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_id_not_null
+ regression | public | parted_self_fk | id | regression | public | parted_self_fk_pkey
+ regression | public | partr_def2 | a | regression | public | part1_a_check
+ regression | public | partr_def2 | a | regression | public | part1_a_not_null
+ regression | public | partr_def2 | b | regression | public | part1_b_check
+ regression | public | partr_def2 | b | regression | public | part1_b_not_null
+ regression | public | persons2 | id | regression | public | persons2_pkey
+ regression | public | persons2 | name | regression | public | persons2_name_key
+ regression | public | persons3 | id | regression | public | persons3_pkey
+ regression | public | persons3 | name | regression | public | persons3_name_not_null
+ regression | public | pp1 | f1 | regression | public | pp1_pkey
+ regression | public | reservations | room_id | regression | public | reservations_room_id_not_null
+ regression | public | rule_and_refint_t1 | id1a | regression | public | rule_and_refint_t1_pkey
+ regression | public | rule_and_refint_t1 | id1a | regression | public | rule_and_refint_t3_id3a_id3b_fkey
+ regression | public | rule_and_refint_t1 | id1b | regression | public | rule_and_refint_t1_pkey
+ regression | public | rule_and_refint_t1 | id1b | regression | public | rule_and_refint_t3_id3a_id3b_fkey
+ regression | public | rule_and_refint_t2 | id2a | regression | public | rule_and_refint_t2_pkey
+ regression | public | rule_and_refint_t2 | id2a | regression | public | rule_and_refint_t3_id3a_id3c_fkey
+ regression | public | rule_and_refint_t2 | id2c | regression | public | rule_and_refint_t2_pkey
+ regression | public | rule_and_refint_t2 | id2c | regression | public | rule_and_refint_t3_id3a_id3c_fkey
+ regression | public | rule_and_refint_t3 | id3a | regression | public | rule_and_refint_t3_pkey
+ regression | public | rule_and_refint_t3 | id3b | regression | public | rule_and_refint_t3_pkey
+ regression | public | rule_and_refint_t3 | id3c | regression | public | rule_and_refint_t3_pkey
+ regression | public | rules_log | id | regression | public | rules_log_id_not_null
+ regression | public | skip_wal_skip_rewrite_index | c | regression | public | skip_wal_skip_rewrite_index_pkey
+ regression | public | spgist_box_tbl | id | regression | public | spgist_box_tbl_id_not_null
+ regression | public | spgist_unlogged_tbl | id | regression | public | spgist_unlogged_tbl_id_not_null
+ regression | public | tbl_include_box | c1 | regression | public | tbl_include_box_idx_unique
+ regression | public | tbl_include_box | c2 | regression | public | tbl_include_box_idx_unique
+ regression | public | tbl_include_pk | c1 | regression | public | tbl_include_pk_pkey
+ regression | public | tbl_include_pk | c2 | regression | public | tbl_include_pk_pkey
+ regression | public | tbl_include_unique1 | c1 | regression | public | tbl_include_unique1_c1_c2_c3_c4_key
+ regression | public | tbl_include_unique1 | c1 | regression | public | tbl_include_unique1_idx_unique
+ regression | public | tbl_include_unique1 | c2 | regression | public | tbl_include_unique1_c1_c2_c3_c4_key
+ regression | public | tbl_include_unique1 | c2 | regression | public | tbl_include_unique1_idx_unique
+ regression | public | test_inh_check | a | regression | public | test_inh_check_a_check
+ regression | public | test_inh_check | b | regression | public | bmerged
+ regression | public | test_inh_check | b | regression | public | bnoinherit
+ regression | public | test_inh_check_child | a | regression | public | test_inh_check_a_check
+ regression | public | test_inh_check_child | b | regression | public | blocal
+ regression | public | test_inh_check_child | b | regression | public | bmerged
+ regression | public | transition_table_base | id | regression | public | transition_table_base_pkey
+ regression | public | transition_table_level1 | level1_no | regression | public | transition_table_level1_level1_no_not_null
+ regression | public | transition_table_level1 | level1_no | regression | public | transition_table_level1_pkey
+ regression | public | transition_table_level2 | level2_no | regression | public | transition_table_level2_level2_no_not_null
+ regression | public | transition_table_level2 | level2_no | regression | public | transition_table_level2_pkey
+ regression | public | transition_table_level2 | parent_no | regression | public | transition_table_level2_parent_no_not_null
+ regression | public | transition_table_status | level | regression | public | transition_table_status_level_not_null
+ regression | public | transition_table_status | level | regression | public | transition_table_status_pkey
+ regression | public | transition_table_status | node_no | regression | public | transition_table_status_node_no_not_null
+ regression | public | transition_table_status | node_no | regression | public | transition_table_status_pkey
+ regression | public | trigger_parted | a | regression | public | trigger_parted_pkey
+ regression | public | trigger_parted_p1 | a | regression | public | trigger_parted_p1_pkey
+ regression | public | trigger_parted_p1_1 | a | regression | public | trigger_parted_p1_1_pkey
+ regression | public | trigger_parted_p2 | a | regression | public | trigger_parted_p2_pkey
+ regression | public | trigger_parted_p2_2 | a | regression | public | trigger_parted_p2_2_pkey
+ regression | public | truncate_b | id | regression | public | truncate_b_id_not_null
+ regression | public | tt0 | x | regression | public | tt0_x_not_null
+ regression | public | tt6 | x | regression | public | tt0_x_not_null
+ regression | public | utf8_verification_inputs | description | regression | public | utf8_verification_inputs_pkey
+ regression | public | view_base_table | key | regression | public | view_base_table_pkey
+(255 rows)
+
+SELECT * FROM information_schema.table_constraints
+ WHERE constraint_schema = 'public'
+ ORDER BY table_name, constraint_name;
+ constraint_catalog | constraint_schema | constraint_name | table_catalog | table_schema | table_name | constraint_type | is_deferrable | initially_deferred | enforced | nulls_distinct
+--------------------+-------------------+--------------------------------------------+---------------+--------------+-------------------------------------+-----------------+---------------+--------------------+----------+----------------
+ regression | public | alter_table_under_transition_tables_pkey | regression | public | alter_table_under_transition_tables | PRIMARY KEY | NO | NO | YES |
+ regression | public | atnotnull1_a_not_null | regression | public | atnotnull1 | CHECK | NO | NO | YES |
+ regression | public | atnotnull1_b_not_null | regression | public | atnotnull1 | CHECK | NO | NO | YES |
+ regression | public | atnotnull1_pkey | regression | public | atnotnull1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | bar1_b_not_null | regression | public | bar1 | CHECK | NO | NO | YES |
+ regression | public | bar2_b_not_null | regression | public | bar2 | CHECK | NO | NO | YES |
+ regression | public | boolvalues_value_not_null | regression | public | boolvalues | CHECK | NO | NO | YES |
+ regression | public | brinopers_check | regression | public | brinopers | CHECK | NO | NO | YES |
+ regression | public | brinopers_check1 | regression | public | brinopers | CHECK | NO | NO | YES |
+ regression | public | brinopers_bloom_check | regression | public | brinopers_bloom | CHECK | NO | NO | YES |
+ regression | public | brinopers_bloom_check1 | regression | public | brinopers_bloom | CHECK | NO | NO | YES |
+ regression | public | brinopers_multi_check | regression | public | brinopers_multi | CHECK | NO | NO | YES |
+ regression | public | brinopers_multi_check1 | regression | public | brinopers_multi | CHECK | NO | NO | YES |
+ regression | public | cc1_f1_not_null | regression | public | cc1 | CHECK | NO | NO | YES |
+ regression | public | cc1_f1_not_null | regression | public | cc2 | CHECK | NO | NO | YES |
+ regression | public | sequence_con | regression | public | check2_tbl | CHECK | NO | NO | YES |
+ regression | public | check_con_tbl_check | regression | public | check_con_tbl | CHECK | NO | NO | YES |
+ regression | public | check_con | regression | public | check_tbl | CHECK | NO | NO | YES |
+ regression | public | clstr_tst_a_not_null | regression | public | clstr_tst | CHECK | NO | NO | YES |
+ regression | public | clstr_tst_con | regression | public | clstr_tst | FOREIGN KEY | NO | NO | YES |
+ regression | public | clstr_tst_pkey | regression | public | clstr_tst | PRIMARY KEY | NO | NO | YES |
+ regression | public | clstr_tst_a_not_null | regression | public | clstr_tst_inh | CHECK | NO | NO | YES |
+ regression | public | clstr_tst_s_pkey | regression | public | clstr_tst_s | PRIMARY KEY | NO | NO | YES |
+ regression | public | clstr_tst_s_rf_a_not_null | regression | public | clstr_tst_s | CHECK | NO | NO | YES |
+ regression | public | cnn_child_b_not_null | regression | public | cnn_child | CHECK | NO | NO | YES |
+ regression | public | cnn_child2_a_not_null | regression | public | cnn_child2 | CHECK | NO | NO | YES |
+ regression | public | cnn_child2_b_not_null | regression | public | cnn_child2 | CHECK | NO | NO | YES |
+ regression | public | cnn_grandchild_b_not_null | regression | public | cnn_grandchild | CHECK | NO | NO | YES |
+ regression | public | cnn_grandchild_b_not_null | regression | public | cnn_grandchild2 | CHECK | NO | NO | YES |
+ regression | public | b_uq | regression | public | cnn_parent | PRIMARY KEY | NO | NO | YES |
+ regression | public | comment_test_pk | regression | public | comment_test | PRIMARY KEY | NO | NO | YES |
+ regression | public | comment_test_positive_col_check | regression | public | comment_test | CHECK | NO | NO | YES |
+ regression | public | comment_test_child_fk | regression | public | comment_test_child | FOREIGN KEY | NO | NO | YES |
+ regression | public | copy_con | regression | public | copy_tbl | CHECK | NO | NO | YES |
+ regression | public | credit_card_cid_fkey | regression | public | credit_card | FOREIGN KEY | NO | NO | YES |
+ regression | public | credit_usage_cid_fkey | regression | public | credit_usage | FOREIGN KEY | NO | NO | YES |
+ regression | public | customer_name_not_null | regression | public | customer | CHECK | NO | NO | YES |
+ regression | public | customer_pkey | regression | public | customer | PRIMARY KEY | NO | NO | YES |
+ regression | public | delete_test_table_pkey | regression | public | delete_test_table | PRIMARY KEY | NO | NO | YES |
+ regression | public | ec0_pkey | regression | public | ec0 | PRIMARY KEY | NO | NO | YES |
+ regression | public | ec1_pkey | regression | public | ec1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | ec2_pkey | regression | public | ec2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | fk_notpartitioned_pk_pkey | regression | public | fk_notpartitioned_pk | PRIMARY KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_1 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_2 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_2_1 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_2_2 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_3 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_4_a_b_fkey | regression | public | fk_partitioned_fk_4 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_4_a_b_fkey | regression | public | fk_partitioned_fk_4_1 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_4_2_a_b_fkey | regression | public | fk_partitioned_fk_4_2 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_4_a_b_fkey | regression | public | fk_partitioned_fk_4_2 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_5_a_b_fkey | regression | public | fk_partitioned_fk_5 | FOREIGN KEY | YES | NO | YES |
+ regression | public | fk_partitioned_fk_5_a_b_fkey1 | regression | public | fk_partitioned_fk_5 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_5 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_5_1_a_b_fkey | regression | public | fk_partitioned_fk_5_1 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_5_a_b_fkey | regression | public | fk_partitioned_fk_5_1 | FOREIGN KEY | YES | NO | YES |
+ regression | public | fk_partitioned_fk_5_a_b_fkey1 | regression | public | fk_partitioned_fk_5_1 | FOREIGN KEY | NO | NO | YES |
+ regression | public | fk_partitioned_fk_a_b_fkey | regression | public | fk_partitioned_fk_5_1 | FOREIGN KEY | NO | NO | YES |
+ regression | public | gtest0_pkey | regression | public | gtest0 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest1_pkey | regression | public | gtest1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest10_pkey | regression | public | gtest10 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest10a_pkey | regression | public | gtest10a | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest1_1_a_not_null | regression | public | gtest1_1 | CHECK | NO | NO | YES |
+ regression | public | gtest1_y_a_not_null | regression | public | gtest1_y | CHECK | NO | NO | YES |
+ regression | public | gtest2_pkey | regression | public | gtest2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest20_b_check | regression | public | gtest20 | CHECK | NO | NO | YES |
+ regression | public | gtest20_pkey | regression | public | gtest20 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest20a_pkey | regression | public | gtest20a | PRIMARY KEY | NO | NO | YES |
+ regression | public | chk | regression | public | gtest20b | CHECK | NO | NO | YES |
+ regression | public | gtest20b_pkey | regression | public | gtest20b | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest21a_b_not_null | regression | public | gtest21a | CHECK | NO | NO | YES |
+ regression | public | gtest21a_pkey | regression | public | gtest21a | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest21b_pkey | regression | public | gtest21b | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest22a_b_key | regression | public | gtest22a | UNIQUE | NO | NO | YES | YES
+ regression | public | gtest22a_pkey | regression | public | gtest22a | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest22b_pkey | regression | public | gtest22b | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest23p_pkey | regression | public | gtest23p | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest23q_b_fkey | regression | public | gtest23q | FOREIGN KEY | NO | NO | YES |
+ regression | public | gtest23q_pkey | regression | public | gtest23q | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest24_pkey | regression | public | gtest24 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest25_pkey | regression | public | gtest25 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest26_pkey | regression | public | gtest26 | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtest_parent_f1_not_null | regression | public | gtest_child | CHECK | NO | NO | YES |
+ regression | public | gtest_parent_f1_not_null | regression | public | gtest_child2 | CHECK | NO | NO | YES |
+ regression | public | gtest_child3_f1_not_null | regression | public | gtest_child3 | CHECK | NO | NO | YES |
+ regression | public | gtest_parent_f1_not_null | regression | public | gtest_parent | CHECK | NO | NO | YES |
+ regression | public | gtest_tableoid_pkey | regression | public | gtest_tableoid | PRIMARY KEY | NO | NO | YES |
+ regression | public | gtestx_a_not_null | regression | public | gtestx | CHECK | NO | NO | YES |
+ regression | public | gtestxx_1_a_not_null | regression | public | gtestxx_1 | CHECK | NO | NO | YES |
+ regression | public | gtestxx_3_a_not_null | regression | public | gtestxx_3 | CHECK | NO | NO | YES |
+ regression | public | gtestxx_4_a_not_null | regression | public | gtestxx_4 | CHECK | NO | NO | YES |
+ regression | public | idxpart_another_pkey | regression | public | idxpart_another | PRIMARY KEY | NO | NO | YES |
+ regression | public | idxpart_another_1_pkey | regression | public | idxpart_another_1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | list_parted2_b_not_null | regression | public | inh_test | CHECK | NO | NO | YES |
+ regression | public | foo | regression | public | inhx | CHECK | NO | NO | YES |
+ regression | public | inhx_pkey | regression | public | inhx | PRIMARY KEY | NO | NO | YES |
+ regression | public | insert_tbl_check | regression | public | insert_tbl | CHECK | NO | NO | YES |
+ regression | public | insert_tbl_con | regression | public | insert_tbl | CHECK | NO | NO | YES |
+ regression | public | inh_check_constraint | regression | public | invalid_check_con | CHECK | NO | NO | YES |
+ regression | public | inh_check_constraint | regression | public | invalid_check_con_child | CHECK | NO | NO | YES |
+ regression | public | itest1_a_not_null | regression | public | itest1 | CHECK | NO | NO | YES |
+ regression | public | itest10_a_not_null | regression | public | itest10 | CHECK | NO | NO | YES |
+ regression | public | itest11_a_not_null | regression | public | itest11 | CHECK | NO | NO | YES |
+ regression | public | itest13_b_not_null | regression | public | itest13 | CHECK | NO | NO | YES |
+ regression | public | itest13_c_not_null | regression | public | itest13 | CHECK | NO | NO | YES |
+ regression | public | itest14_id_not_null | regression | public | itest14 | CHECK | NO | NO | YES |
+ regression | public | itest2_a_not_null | regression | public | itest2 | CHECK | NO | NO | YES |
+ regression | public | itest3_a_not_null | regression | public | itest3 | CHECK | NO | NO | YES |
+ regression | public | itest3_c_not_null | regression | public | itest3 | CHECK | NO | NO | YES |
+ regression | public | itest5_a_not_null | regression | public | itest5 | CHECK | NO | NO | YES |
+ regression | public | itest6_a_not_null | regression | public | itest6 | CHECK | NO | NO | YES |
+ regression | public | itest7_a_not_null | regression | public | itest7 | CHECK | NO | NO | YES |
+ regression | public | itest7_a_not_null | regression | public | itest7a | CHECK | NO | NO | YES |
+ regression | public | itest7c_a_not_null | regression | public | itest7c | CHECK | NO | NO | YES |
+ regression | public | itest7d_a_not_null | regression | public | itest7d | CHECK | NO | NO | YES |
+ regression | public | itest7d_a_not_null | regression | public | itest7e | CHECK | NO | NO | YES |
+ regression | public | itest9_a_not_null | regression | public | itest9 | CHECK | NO | NO | YES |
+ regression | public | mlparted1_a_not_null | regression | public | mlparted1 | CHECK | NO | NO | YES |
+ regression | public | mlparted1_b_not_null | regression | public | mlparted1 | CHECK | NO | NO | YES |
+ regression | public | mlparted11_a_not_null | regression | public | mlparted11 | CHECK | NO | NO | YES |
+ regression | public | mlparted1_b_not_null | regression | public | mlparted11 | CHECK | NO | NO | YES |
+ regression | public | mlparted1_a_not_null | regression | public | mlparted12 | CHECK | NO | NO | YES |
+ regression | public | mlparted1_b_not_null | regression | public | mlparted12 | CHECK | NO | NO | YES |
+ regression | public | mlparted2_a_not_null | regression | public | mlparted2 | CHECK | NO | NO | YES |
+ regression | public | mlparted2_b_not_null | regression | public | mlparted2 | CHECK | NO | NO | YES |
+ regression | public | mlparted4_a_not_null | regression | public | mlparted4 | CHECK | NO | NO | YES |
+ regression | public | mvtest_t_amt_not_null | regression | public | mvtest_t | CHECK | NO | NO | YES |
+ regression | public | mvtest_t_id_not_null | regression | public | mvtest_t | CHECK | NO | NO | YES |
+ regression | public | mvtest_t_pkey | regression | public | mvtest_t | PRIMARY KEY | NO | NO | YES |
+ regression | public | mvtest_t_type_not_null | regression | public | mvtest_t | CHECK | NO | NO | YES |
+ regression | public | notnull_tbl2_pkey | regression | public | notnull_tbl2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | notnull_tbl3_a_check | regression | public | notnull_tbl3 | CHECK | NO | NO | YES |
+ regression | public | nv_child_2009_d_check | regression | public | nv_child_2009 | CHECK | NO | NO | YES |
+ regression | public | nv_parent_d_check | regression | public | nv_child_2009 | CHECK | NO | NO | YES |
+ regression | public | nv_child_2010_d_check | regression | public | nv_child_2010 | CHECK | NO | NO | YES |
+ regression | public | nv_parent_d_check | regression | public | nv_child_2010 | CHECK | NO | NO | YES |
+ regression | public | nv_child_2011_d_check | regression | public | nv_child_2011 | CHECK | NO | NO | YES |
+ regression | public | nv_parent_d_check | regression | public | nv_child_2011 | CHECK | NO | NO | YES |
+ regression | public | nv_parent_check | regression | public | nv_parent | CHECK | NO | NO | YES |
+ regression | public | nv_parent_d_check | regression | public | nv_parent | CHECK | NO | NO | YES |
+ regression | public | part1_self_fk_id_not_null | regression | public | part1_self_fk | CHECK | NO | NO | YES |
+ regression | public | part1_self_fk_pkey | regression | public | part1_self_fk | PRIMARY KEY | NO | NO | YES |
+ regression | public | parted_self_fk_id_abc_fkey | regression | public | part1_self_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | part2_self_fk_pkey | regression | public | part2_self_fk | PRIMARY KEY | NO | NO | YES |
+ regression | public | parted_self_fk_id_abc_fkey | regression | public | part2_self_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | parted_self_fk_id_not_null | regression | public | part2_self_fk | CHECK | NO | NO | YES |
+ regression | public | part32_self_fk_pkey | regression | public | part32_self_fk | PRIMARY KEY | NO | NO | YES |
+ regression | public | part3_self_fk_id_not_null | regression | public | part32_self_fk | CHECK | NO | NO | YES |
+ regression | public | parted_self_fk_id_abc_fkey | regression | public | part32_self_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | part33_self_fk_id_not_null | regression | public | part33_self_fk | CHECK | NO | NO | YES |
+ regression | public | part33_self_fk_pkey | regression | public | part33_self_fk | PRIMARY KEY | NO | NO | YES |
+ regression | public | parted_self_fk_id_abc_fkey | regression | public | part33_self_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | part3_self_fk_id_not_null | regression | public | part3_self_fk | CHECK | NO | NO | YES |
+ regression | public | part3_self_fk_pkey | regression | public | part3_self_fk | PRIMARY KEY | NO | NO | YES |
+ regression | public | parted_self_fk_id_abc_fkey | regression | public | part3_self_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | check_b | regression | public | part_7_a_null | CHECK | NO | NO | YES |
+ regression | public | part_rp_a_check | regression | public | part_rp | CHECK | NO | NO | YES |
+ regression | public | part_rp100_a_check | regression | public | part_rp100 | CHECK | NO | NO | YES |
+ regression | public | parted_self_fk_id_abc_fkey | regression | public | parted_self_fk | FOREIGN KEY | NO | NO | YES |
+ regression | public | parted_self_fk_id_not_null | regression | public | parted_self_fk | CHECK | NO | NO | YES |
+ regression | public | parted_self_fk_pkey | regression | public | parted_self_fk | PRIMARY KEY | NO | NO | YES |
+ regression | public | part1_a_check | regression | public | partr_def2 | CHECK | NO | NO | YES |
+ regression | public | part1_a_not_null | regression | public | partr_def2 | CHECK | NO | NO | YES |
+ regression | public | part1_b_check | regression | public | partr_def2 | CHECK | NO | NO | YES |
+ regression | public | part1_b_not_null | regression | public | partr_def2 | CHECK | NO | NO | YES |
+ regression | public | persons2_name_key | regression | public | persons2 | UNIQUE | NO | NO | YES | YES
+ regression | public | persons2_pkey | regression | public | persons2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | persons3_name_not_null | regression | public | persons3 | CHECK | NO | NO | YES |
+ regression | public | persons3_pkey | regression | public | persons3 | PRIMARY KEY | NO | NO | YES |
+ regression | public | pp1_pkey | regression | public | pp1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | reservations_room_id_not_null | regression | public | reservations | CHECK | NO | NO | YES |
+ regression | public | rule_and_refint_t1_pkey | regression | public | rule_and_refint_t1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | rule_and_refint_t2_pkey | regression | public | rule_and_refint_t2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | rule_and_refint_t3_id3a_id3b_fkey | regression | public | rule_and_refint_t3 | FOREIGN KEY | NO | NO | YES |
+ regression | public | rule_and_refint_t3_id3a_id3c_fkey | regression | public | rule_and_refint_t3 | FOREIGN KEY | NO | NO | YES |
+ regression | public | rule_and_refint_t3_pkey | regression | public | rule_and_refint_t3 | PRIMARY KEY | NO | NO | YES |
+ regression | public | rules_log_id_not_null | regression | public | rules_log | CHECK | NO | NO | YES |
+ regression | public | skip_wal_skip_rewrite_index_pkey | regression | public | skip_wal_skip_rewrite_index | PRIMARY KEY | NO | NO | YES |
+ regression | public | spgist_box_tbl_id_not_null | regression | public | spgist_box_tbl | CHECK | NO | NO | YES |
+ regression | public | spgist_unlogged_tbl_id_not_null | regression | public | spgist_unlogged_tbl | CHECK | NO | NO | YES |
+ regression | public | tbl_include_box_idx_unique | regression | public | tbl_include_box | PRIMARY KEY | NO | NO | YES |
+ regression | public | tbl_include_pk_pkey | regression | public | tbl_include_pk | PRIMARY KEY | NO | NO | YES |
+ regression | public | tbl_include_unique1_c1_c2_c3_c4_key | regression | public | tbl_include_unique1 | UNIQUE | NO | NO | YES | YES
+ regression | public | tbl_include_unique1_idx_unique | regression | public | tbl_include_unique1 | UNIQUE | NO | NO | YES | YES
+ regression | public | bmerged | regression | public | test_inh_check | CHECK | NO | NO | YES |
+ regression | public | bnoinherit | regression | public | test_inh_check | CHECK | NO | NO | YES |
+ regression | public | test_inh_check_a_check | regression | public | test_inh_check | CHECK | NO | NO | YES |
+ regression | public | blocal | regression | public | test_inh_check_child | CHECK | NO | NO | YES |
+ regression | public | bmerged | regression | public | test_inh_check_child | CHECK | NO | NO | YES |
+ regression | public | test_inh_check_a_check | regression | public | test_inh_check_child | CHECK | NO | NO | YES |
+ regression | public | transition_table_base_pkey | regression | public | transition_table_base | PRIMARY KEY | NO | NO | YES |
+ regression | public | transition_table_level1_level1_no_not_null | regression | public | transition_table_level1 | CHECK | NO | NO | YES |
+ regression | public | transition_table_level1_pkey | regression | public | transition_table_level1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | transition_table_level2_level2_no_not_null | regression | public | transition_table_level2 | CHECK | NO | NO | YES |
+ regression | public | transition_table_level2_parent_no_not_null | regression | public | transition_table_level2 | CHECK | NO | NO | YES |
+ regression | public | transition_table_level2_pkey | regression | public | transition_table_level2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | transition_table_status_level_not_null | regression | public | transition_table_status | CHECK | NO | NO | YES |
+ regression | public | transition_table_status_node_no_not_null | regression | public | transition_table_status | CHECK | NO | NO | YES |
+ regression | public | transition_table_status_pkey | regression | public | transition_table_status | PRIMARY KEY | NO | NO | YES |
+ regression | public | trigger_parted_pkey | regression | public | trigger_parted | PRIMARY KEY | NO | NO | YES |
+ regression | public | trigger_parted_p1_pkey | regression | public | trigger_parted_p1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | trigger_parted_p1_1_pkey | regression | public | trigger_parted_p1_1 | PRIMARY KEY | NO | NO | YES |
+ regression | public | trigger_parted_p2_pkey | regression | public | trigger_parted_p2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | trigger_parted_p2_2_pkey | regression | public | trigger_parted_p2_2 | PRIMARY KEY | NO | NO | YES |
+ regression | public | truncate_b_id_not_null | regression | public | truncate_b | CHECK | NO | NO | YES |
+ regression | public | tt0_x_not_null | regression | public | tt0 | CHECK | NO | NO | YES |
+ regression | public | tt0_x_not_null | regression | public | tt6 | CHECK | NO | NO | YES |
+ regression | public | utf8_verification_inputs_pkey | regression | public | utf8_verification_inputs | PRIMARY KEY | NO | NO | YES |
+ regression | public | view_base_table_pkey | regression | public | view_base_table | PRIMARY KEY | NO | NO | YES |
+(211 rows)
+
+--
+-- Domain constraints
+--
+SELECT * FROM information_schema.column_domain_usage
+ WHERE domain_schema = 'public' AND table_schema = 'public'
+ ORDER BY domain_name;
+ domain_catalog | domain_schema | domain_name | table_catalog | table_schema | table_name | column_name
+----------------+---------------+--------------+---------------+--------------+-------------------+-------------
+ regression | public | con | regression | public | domcontest | col1
+ regression | public | dom | regression | public | domview | col1
+ regression | public | gtestdomain1 | regression | public | gtest24 | b
+ regression | public | spgist_text | regression | public | spgist_domain_tbl | f1
+ regression | public | things | regression | public | thethings | stuff
+(5 rows)
+
+SELECT * FROM information_schema.domain_constraints
+ WHERE domain_schema = 'public'
+ ORDER BY constraint_name;
+ constraint_catalog | constraint_schema | constraint_name | domain_catalog | domain_schema | domain_name | is_deferrable | initially_deferred
+--------------------+-------------------+--------------------------+----------------+---------------+--------------------+---------------+--------------------
+ regression | public | con_check | regression | public | con | NO | NO
+ regression | public | gtestdomain1_check | regression | public | gtestdomain1 | NO | NO
+ regression | public | meow | regression | public | things | NO | NO
+ regression | public | orderedpair_check | regression | public | orderedpair | NO | NO
+ regression | public | plpgsql_arr_domain_check | regression | public | plpgsql_arr_domain | NO | NO
+ regression | public | plpgsql_domain_check | regression | public | plpgsql_domain | NO | NO
+ regression | public | pos_int_check | regression | public | pos_int | NO | NO
+ regression | public | sorted | regression | public | orderedarray | NO | NO
+ regression | public | str_domain2_check | regression | public | str_domain2 | NO | NO
+(9 rows)
+
+SELECT * FROM information_schema.domains
+ WHERE domain_schema = 'public'
+ ORDER BY domain_name;
+ domain_catalog | domain_schema | domain_name | data_type | character_maximum_length | character_octet_length | character_set_catalog | character_set_schema | character_set_name | collation_catalog | collation_schema | collation_name | numeric_precision | numeric_precision_radix | numeric_scale | datetime_precision | interval_type | interval_precision | domain_default | udt_catalog | udt_schema | udt_name | scope_catalog | scope_schema | scope_name | maximum_cardinality | dtd_identifier
+----------------+---------------+--------------------+-------------------+--------------------------+------------------------+-----------------------+----------------------+--------------------+-------------------+------------------+----------------+-------------------+-------------------------+---------------+--------------------+---------------+--------------------+----------------+-------------+------------+----------+---------------+--------------+------------+---------------------+----------------
+ regression | public | con | integer | | | | | | | | | 32 | 2 | 0 | | | | | regression | pg_catalog | int4 | | | | | 1
+ regression | public | dom | integer | | | | | | | | | 32 | 2 | 0 | | | | | regression | pg_catalog | int4 | | | | | 1
+ regression | public | gtestdomain1 | integer | | | | | | | | | 32 | 2 | 0 | | | | | regression | pg_catalog | int4 | | | | | 1
+ regression | public | mynums | numeric[] | | | | | | | | | | | | | | | | regression | pg_catalog | _numeric | | | | | 1
+ regression | public | mynums2 | USER-DEFINED | | | | | | | | | | | | | | | | regression | public | mynums | | | | | 1
+ regression | public | orderedarray | integer[] | | | | | | | | | | | | | | | | regression | pg_catalog | _int4 | | | | | 1
+ regression | public | orderedpair | integer[] | | | | | | | | | | | | | | | | regression | pg_catalog | _int4 | | | | | 1
+ regression | public | plpgsql_arr_domain | integer[] | | | | | | | | | | | | | | | | regression | pg_catalog | _int4 | | | | | 1
+ regression | public | plpgsql_domain | integer | | | | | | | | | 32 | 2 | 0 | | | | | regression | pg_catalog | int4 | | | | | 1
+ regression | public | pos_int | integer | | | | | | | | | 32 | 2 | 0 | | | | | regression | pg_catalog | int4 | | | | | 1
+ regression | public | spgist_text | character varying | | 1073741824 | | | | | | | | | | | | | | regression | pg_catalog | varchar | | | | | 1
+ regression | public | str_domain | text | | 1073741824 | | | | | | | | | | | | | | regression | pg_catalog | text | | | | | 1
+ regression | public | str_domain2 | text | | 1073741824 | | | | | | | | | | | | | 'foo'::text | regression | pg_catalog | text | | | | | 1
+ regression | public | testboolxmldomain | boolean | | | | | | | | | | | | | | | | regression | pg_catalog | bool | | | | | 1
+ regression | public | testdatexmldomain | date | | | | | | | | | | | | 0 | | | | regression | pg_catalog | date | | | | | 1
+ regression | public | testxmldomain | character varying | | 1073741824 | | | | | | | | | | | | | | regression | pg_catalog | varchar | | | | | 1
+ regression | public | things | integer | | | | | | | | | 32 | 2 | 0 | | | | | regression | pg_catalog | int4 | | | | | 1
+(17 rows)
+
+SELECT * FROM information_schema.check_constraints
+ WHERE (constraint_schema, constraint_name)
+ IN (SELECT constraint_schema, constraint_name
+ FROM information_schema.domain_constraints
+ WHERE domain_schema = 'public')
+ ORDER BY constraint_name;
+ constraint_catalog | constraint_schema | constraint_name | check_clause
+--------------------+-------------------+--------------------------+-----------------------------------
+ regression | public | con_check | ((VALUE > 0))
+ regression | public | gtestdomain1_check | ((VALUE < 10))
+ regression | public | meow | ((VALUE < 11))
+ regression | public | orderedpair_check | (((VALUE)[1] < (VALUE)[2]))
+ regression | public | plpgsql_arr_domain_check | (plpgsql_arr_domain_check(VALUE))
+ regression | public | plpgsql_domain_check | (plpgsql_domain_check(VALUE))
+ regression | public | pos_int_check | ((VALUE > 0))
+ regression | public | sorted | (((VALUE)[1] < (VALUE)[2]))
+ regression | public | str_domain2_check | ((VALUE <> 'foo'::text))
+(9 rows)
+
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index 4df9d8503b..22e9896f18 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -130,5 +130,6 @@ test: event_trigger oidjoins
test: fast_default
# run tablespace test at the end because it drops the tablespace created during
-# setup that other tests may use.
-test: tablespace
+# setup that other tests may use. This is also a good place to verify
+# our information_schema definitions.
+test: tablespace information_schema
diff --git a/src/test/regress/sql/information_schema.sql b/src/test/regress/sql/information_schema.sql
new file mode 100644
index 0000000000..a0a8b1ed58
--- /dev/null
+++ b/src/test/regress/sql/information_schema.sql
@@ -0,0 +1,41 @@
+-- We test the information schema last, so that we examine
+-- database state at the end of the regression test run.
+
+--
+-- Table constraints
+--
+
+SELECT * FROM information_schema.check_constraints
+ WHERE constraint_schema = 'public'
+ ORDER BY constraint_name;
+
+SELECT * FROM information_schema.constraint_column_usage
+ WHERE constraint_schema = 'public'
+ ORDER BY table_name, column_name, constraint_name;
+
+SELECT * FROM information_schema.table_constraints
+ WHERE constraint_schema = 'public'
+ ORDER BY table_name, constraint_name;
+
+--
+-- Domain constraints
+--
+
+SELECT * FROM information_schema.column_domain_usage
+ WHERE domain_schema = 'public' AND table_schema = 'public'
+ ORDER BY domain_name;
+
+SELECT * FROM information_schema.domain_constraints
+ WHERE domain_schema = 'public'
+ ORDER BY constraint_name;
+
+SELECT * FROM information_schema.domains
+ WHERE domain_schema = 'public'
+ ORDER BY domain_name;
+
+SELECT * FROM information_schema.check_constraints
+ WHERE (constraint_schema, constraint_name)
+ IN (SELECT constraint_schema, constraint_name
+ FROM information_schema.domain_constraints
+ WHERE domain_schema = 'public')
+ ORDER BY constraint_name;
--
2.39.2
^ permalink raw reply [nested|flat] 2+ messages in thread
end of thread, other threads:[~2023-09-04 17:10 UTC | newest]
Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-09-12 13:07 [PATCH 2/8] Pass all scan keys to BRIN consistent function at once Tomas Vondra <[email protected]>
2023-09-04 17:10 information_schema and not-null constraints Alvaro Herrera <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox