diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-07-12 18:43:19 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-07-12 18:43:19 +0000 |
| commit | 7c6df91dda27accab3097390ef0d21d93028c7a1 (patch) | |
| tree | 5705b975e8de4edf82252e6df28e0bd57c83cb95 /src/backend/rewrite/rewriteDefine.c | |
| parent | 791a40f943e2a9353c5823fb4f2bd446ec623d38 (diff) | |
| download | postgresql-7c6df91dda27accab3097390ef0d21d93028c7a1.tar.gz | |
Second phase of committing Rod Taylor's pg_depend/pg_constraint patch.
pg_relcheck is gone; CHECK, UNIQUE, PRIMARY KEY, and FOREIGN KEY
constraints all have real live entries in pg_constraint. pg_depend
exists, and RESTRICT/CASCADE options work on most kinds of DROP;
however, pg_depend is not yet very well populated with dependencies.
(Most of the ones that are present at this point just replace formerly
hardwired associations, such as the implicit drop of a relation's pg_type
entry when the relation is dropped.) Need to add more logic to create
dependency entries, improve pg_dump to dump constraints in place of
indexes and triggers, and add some regression tests.
Diffstat (limited to 'src/backend/rewrite/rewriteDefine.c')
| -rw-r--r-- | src/backend/rewrite/rewriteDefine.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 43f8ffd6f1..5922cb4ab5 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.73 2002/06/20 20:29:33 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.74 2002/07/12 18:43:17 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -16,6 +16,7 @@ #include "access/heapam.h" #include "catalog/catname.h" +#include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_rewrite.h" #include "commands/view.h" @@ -57,6 +58,8 @@ InsertRule(char *rulname, TupleDesc tupDesc; HeapTuple tup; Oid rewriteObjectId; + ObjectAddress myself, + referenced; if (IsDefinedRewriteRule(eventrel_oid, rulname)) elog(ERROR, "Attempt to insert rule \"%s\" failed: already exists", @@ -103,6 +106,23 @@ InsertRule(char *rulname, heap_freetuple(tup); + /* + * Install dependency on rule's relation to ensure it will go away + * on relation deletion. If the rule is ON SELECT, make the dependency + * implicit --- this prevents deleting a view's SELECT rule. Other + * kinds of rules can be AUTO. + */ + myself.classId = RelationGetRelid(pg_rewrite_desc); + myself.objectId = rewriteObjectId; + myself.objectSubId = 0; + + referenced.classId = RelOid_pg_class; + referenced.objectId = eventrel_oid; + referenced.objectSubId = 0; + + recordDependencyOn(&myself, &referenced, + (evtype == CMD_SELECT) ? DEPENDENCY_INTERNAL : DEPENDENCY_AUTO); + heap_close(pg_rewrite_desc, RowExclusiveLock); return rewriteObjectId; |
