diff options
Diffstat (limited to 'src/backend/catalog/pg_constraint.c')
-rw-r--r-- | src/backend/catalog/pg_constraint.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 90932be8310..c54c18d62bc 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -973,8 +973,12 @@ get_relation_constraint_attnos(Oid relid, const char *conname, } /* - * Return the OID of the constraint associated with the given index in the + * Return the OID of the constraint enforced by the given index in the * given relation; or InvalidOid if no such index is catalogued. + * + * Much like get_constraint_index, this function is concerned only with the + * one constraint that "owns" the given index. Therefore, constraints of + * types other than unique, primary-key, and exclusion are ignored. */ Oid get_relation_idx_constraint_oid(Oid relationId, Oid indexId) @@ -999,6 +1003,13 @@ get_relation_idx_constraint_oid(Oid relationId, Oid indexId) Form_pg_constraint constrForm; constrForm = (Form_pg_constraint) GETSTRUCT(tuple); + + /* See above */ + if (constrForm->contype != CONSTRAINT_PRIMARY && + constrForm->contype != CONSTRAINT_UNIQUE && + constrForm->contype != CONSTRAINT_EXCLUSION) + continue; + if (constrForm->conindid == indexId) { constraintId = constrForm->oid; |