This patch implements a different "relkind"
authorBruce Momjian <bruce@momjian.us>
Tue, 12 Sep 2000 04:49:17 +0000 (04:49 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 12 Sep 2000 04:49:17 +0000 (04:49 +0000)
commitfe0184436f6a66a7733b579e098215a4aa80d9f9
tree0c0b9f1229231ade8b2e58e5333ca15fe09c76aa
parente601dfe4ca8664fe0ef61a94a86af2503e5518bb
This patch implements a different "relkind"
for views. Views are now have a "relkind" of
RELKIND_VIEW instead of RELKIND_RELATION.

Also, views no longer have actual heap storage
files.

The following changes were made

1. CREATE VIEW sets the new relkind

2. The executor complains if a DELETE or
        INSERT references a view.

3. DROP RULE complains if an attempt is made
        to delete a view SELECT rule.

4. CREATE RULE "_RETmytable" AS ON SELECT TO mytable DO INSTEAD ...
        1. checks to make sure mytable is empty.
        2. sets the relkind to RELKIND_VIEW.
        3. deletes the heap storage files.
5. LOCK myview is not allowed. :)

6. the regression test type_sanity was changed to
        account for the new relkind value.

7. CREATE INDEX ON myview ... is not allowed.

8. VACUUM myview is not allowed.
        VACUUM automatically skips views when do the entire
        database.

9. TRUNCATE myview is not allowed.

THINGS LEFT TO THINK ABOUT

o pg_views

o pg_dump

o pgsql (\d \dv)
o Do we really want to be able to inherit from views?

o Is 'DROP TABLE myview' OK?

--
Mark Hollomon
14 files changed:
src/backend/catalog/heap.c
src/backend/commands/command.c
src/backend/commands/comment.c
src/backend/commands/vacuum.c
src/backend/commands/view.c
src/backend/executor/execMain.c
src/backend/rewrite/rewriteDefine.c
src/backend/rewrite/rewriteRemove.c
src/backend/tcop/utility.c
src/backend/utils/cache/relcache.c
src/include/catalog/catversion.h
src/include/catalog/pg_class.h
src/test/regress/expected/type_sanity.out
src/test/regress/sql/type_sanity.sql