diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-07-28 02:56:31 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-07-28 02:56:31 +0000 |
commit | c1b9ec24efb5d576800fb5163acab6bdefb4391c (patch) | |
tree | 794244f01dbc2ebd663513115b7a08c9d9fa0141 /src/backend/catalog/pg_constraint.c | |
parent | 36942504fc7d0738191573225cc9d8e905a74f4b (diff) | |
download | postgresql-c1b9ec24efb5d576800fb5163acab6bdefb4391c.tar.gz |
Add system catalog columns pg_constraint.conindid and pg_trigger.tgconstrindid.
conindid is the index supporting a constraint. We can use this not only for
unique/primary-key constraints, but also foreign-key constraints, which
depend on the unique index that constrains the referenced columns.
tgconstrindid is just copied from the constraint's conindid field, or is
zero for triggers not associated with constraints.
This is mainly intended as infrastructure for upcoming patches, but it has
some virtue in itself, since it exposes a relationship that you formerly
had to grovel in pg_depend to determine. I simplified one information_schema
view accordingly. (There is a pg_dump query that could also use conindid,
but I left it alone because it wasn't clear it'd get any faster.)
Diffstat (limited to 'src/backend/catalog/pg_constraint.c')
-rw-r--r-- | src/backend/catalog/pg_constraint.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index e6756b7477..81c35100c7 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/pg_constraint.c,v 1.46 2009/07/16 06:33:42 petere Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/pg_constraint.c,v 1.47 2009/07/28 02:56:29 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -49,6 +49,7 @@ CreateConstraintEntry(const char *constraintName, const int16 *constraintKey, int constraintNKeys, Oid domainId, + Oid indexRelId, Oid foreignRelId, const int16 *foreignKey, const Oid *pfEqOp, @@ -58,7 +59,6 @@ CreateConstraintEntry(const char *constraintName, char foreignUpdateType, char foreignDeleteType, char foreignMatchType, - Oid indexRelId, Node *conExpr, const char *conBin, const char *conSrc, @@ -144,6 +144,7 @@ CreateConstraintEntry(const char *constraintName, values[Anum_pg_constraint_condeferred - 1] = BoolGetDatum(isDeferred); values[Anum_pg_constraint_conrelid - 1] = ObjectIdGetDatum(relId); values[Anum_pg_constraint_contypid - 1] = ObjectIdGetDatum(domainId); + values[Anum_pg_constraint_conindid - 1] = ObjectIdGetDatum(indexRelId); values[Anum_pg_constraint_confrelid - 1] = ObjectIdGetDatum(foreignRelId); values[Anum_pg_constraint_confupdtype - 1] = CharGetDatum(foreignUpdateType); values[Anum_pg_constraint_confdeltype - 1] = CharGetDatum(foreignDeleteType); @@ -273,11 +274,13 @@ CreateConstraintEntry(const char *constraintName, } } - if (OidIsValid(indexRelId)) + if (OidIsValid(indexRelId) && constraintType == CONSTRAINT_FOREIGN) { /* * Register normal dependency on the unique index that supports a - * foreign-key constraint. + * foreign-key constraint. (Note: for indexes associated with + * unique or primary-key constraints, the dependency runs the other + * way, and is not made here.) */ ObjectAddress relobject; |