diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2024-03-20 09:29:08 +0100 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2024-03-20 10:05:37 +0100 |
commit | e5da0fe3c22b34c4433f1729e88495554b5331ed (patch) | |
tree | fa99ee64f20e482db38cf3c45d849510a9e7507a /src/backend/catalog/pg_constraint.c | |
parent | c9c260decd239159277c1baad9d929ebcdf2491e (diff) | |
download | postgresql-e5da0fe3c22b34c4433f1729e88495554b5331ed.tar.gz postgresql-e5da0fe3c22b34c4433f1729e88495554b5331ed.zip |
Catalog domain not-null constraints
This applies the explicit catalog representation of not-null
constraints introduced by b0e96f3119 for table constraints also to
domain not-null constraints.
Reviewed-by: Aleksander Alekseev <aleksander@timescale.com>
Reviewed-by: jian he <jian.universality@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/9ec24d7b-633d-463a-84c6-7acff769c9e8%40eisentraut.org
Diffstat (limited to 'src/backend/catalog/pg_constraint.c')
-rw-r--r-- | src/backend/catalog/pg_constraint.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 5ea9df219c1..f1543ae7d35 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -630,6 +630,50 @@ findNotNullConstraint(Oid relid, const char *colname) } /* + * Find and return the pg_constraint tuple that implements a validated + * not-null constraint for the given domain. + */ +HeapTuple +findDomainNotNullConstraint(Oid typid) +{ + Relation pg_constraint; + HeapTuple conTup, + retval = NULL; + SysScanDesc scan; + ScanKeyData key; + + pg_constraint = table_open(ConstraintRelationId, AccessShareLock); + ScanKeyInit(&key, + Anum_pg_constraint_contypid, + BTEqualStrategyNumber, F_OIDEQ, + ObjectIdGetDatum(typid)); + scan = systable_beginscan(pg_constraint, ConstraintRelidTypidNameIndexId, + true, NULL, 1, &key); + + while (HeapTupleIsValid(conTup = systable_getnext(scan))) + { + Form_pg_constraint con = (Form_pg_constraint) GETSTRUCT(conTup); + + /* + * We're looking for a NOTNULL constraint that's marked validated. + */ + if (con->contype != CONSTRAINT_NOTNULL) + continue; + if (!con->convalidated) + continue; + + /* Found it */ + retval = heap_copytuple(conTup); + break; + } + + systable_endscan(scan); + table_close(pg_constraint, AccessShareLock); + + return retval; +} + +/* * Given a pg_constraint tuple for a not-null constraint, return the column * number it is for. */ |