From fdbd6ca75ed3ccd2b7d1e6ed65c76978129bf128 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Tue, 21 Nov 2000 01:11:50 +0000 Subject: [PATCH] Simplify definition of pg_tables and pg_views views by making use of new separate relkind for views (per some discussion back in September). I didn't force initdb, but rules regress test will show differences until you do one. --- src/bin/initdb/initdb.sh | 21 ++++++++------------- src/test/regress/expected/rules.out | 10 +++++----- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 2358c61b5e7..33b0b423b11 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -24,7 +24,7 @@ # # Copyright (c) 1994, Regents of the University of California # -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.114 2000/11/14 18:37:45 tgl Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.115 2000/11/21 01:11:49 tgl Exp $ # #------------------------------------------------------------------------- @@ -583,13 +583,11 @@ echo "CREATE VIEW pg_views AS \ pg_get_userbyid(C.relowner) AS viewowner, \ pg_get_viewdef(C.relname) AS definition \ FROM pg_class C \ - WHERE C.relhasrules \ - AND EXISTS ( \ - SELECT rulename FROM pg_rewrite R \ - WHERE ev_class = C.oid AND ev_type = '1' \ - )" \ + WHERE C.relkind = 'v';" \ | "$PGPATH"/postgres $PGSQL_OPT template1 > /dev/null || exit_nicely +# XXX why does pg_tables include sequences? + echo "CREATE VIEW pg_tables AS \ SELECT \ C.relname AS tablename, \ @@ -598,11 +596,7 @@ echo "CREATE VIEW pg_tables AS \ C.relhasrules AS hasrules, \ (C.reltriggers > 0) AS hastriggers \ FROM pg_class C \ - WHERE C.relkind IN ('r', 's') \ - AND NOT EXISTS ( \ - SELECT rulename FROM pg_rewrite \ - WHERE ev_class = C.oid AND ev_type = '1' \ - )" \ + WHERE C.relkind IN ('r', 's');" \ | "$PGPATH"/postgres $PGSQL_OPT template1 > /dev/null || exit_nicely echo "CREATE VIEW pg_indexes AS \ @@ -611,8 +605,9 @@ echo "CREATE VIEW pg_indexes AS \ I.relname AS indexname, \ pg_get_indexdef(X.indexrelid) AS indexdef \ FROM pg_index X, pg_class C, pg_class I \ - WHERE C.oid = X.indrelid \ - AND I.oid = X.indexrelid" \ + WHERE C.relkind = 'r' AND I.relkind = 'i' \ + AND C.oid = X.indrelid \ + AND I.oid = X.indexrelid;" \ | "$PGPATH"/postgres $PGSQL_OPT template1 > /dev/null || exit_nicely echo "Loading pg_description." diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 11e1539778c..673c6754689 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1203,14 +1203,14 @@ drop table foo2; -- Check that ruleutils are working -- SELECT viewname, definition FROM pg_views ORDER BY viewname; - viewname | definition ---------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + viewname | definition +--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ iexit | SELECT ih.name, ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih, ramp r WHERE (ih.thepath ## r.thepath); - pg_indexes | SELECT c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(x.indexrelid) AS indexdef FROM pg_index x, pg_class c, pg_class i WHERE ((c.oid = x.indrelid) AND (i.oid = x.indexrelid)); + pg_indexes | SELECT c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(x.indexrelid) AS indexdef FROM pg_index x, pg_class c, pg_class i WHERE ((((c.relkind = 'r'::"char") AND (i.relkind = 'i'::"char")) AND (c.oid = x.indrelid)) AND (i.oid = x.indexrelid)); pg_rules | SELECT c.relname AS tablename, r.rulename, pg_get_ruledef(r.rulename) AS definition FROM pg_rewrite r, pg_class c WHERE ((r.rulename !~ '^_RET'::text) AND (c.oid = r.ev_class)); - pg_tables | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c WHERE (((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")) AND (NOT (EXISTS (SELECT pg_rewrite.rulename FROM pg_rewrite WHERE ((pg_rewrite.ev_class = c.oid) AND (pg_rewrite.ev_type = '1'::"char")))))); + pg_tables | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c WHERE ((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")); pg_user | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usetrace, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil FROM pg_shadow; - pg_views | SELECT c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.relname) AS definition FROM pg_class c WHERE (c.relhasrules AND (EXISTS (SELECT r.rulename FROM pg_rewrite r WHERE ((r.ev_class = c.oid) AND (r.ev_type = '1'::"char"))))); + pg_views | SELECT c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.relname) AS definition FROM pg_class c WHERE (c.relkind = 'v'::"char"); rtest_v1 | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1; rtest_vcomp | SELECT x.part, (x.size * y.factor) AS size_in_cm FROM rtest_comp x, rtest_unitfact y WHERE (x.unit = y.unit); rtest_vview1 | SELECT x.a, x.b FROM rtest_view1 x WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y WHERE (y.a = x.a))); -- GitLab