mirror of
https://github.com/postgres/postgres.git
synced 2025-12-07 12:02:30 +03:00
Rule names are now unique per-relation, rather than unique globally.
DROP RULE and COMMENT ON RULE syntax adds an 'ON tablename' clause, similar to TRIGGER syntaxes. To allow loading of existing pg_dump files containing COMMENT ON RULE, the COMMENT code will still accept the old syntax --- but only if the target rulename is unique across the whole database.
This commit is contained in:
@@ -217,13 +217,13 @@ ERROR: parser: parse error at or near ";"
|
||||
drop rule 314159;
|
||||
ERROR: parser: parse error at or near "314159"
|
||||
-- no such rule
|
||||
drop rule nonesuch;
|
||||
ERROR: Rule "nonesuch" not found
|
||||
drop rule nonesuch on noplace;
|
||||
ERROR: Relation "noplace" does not exist
|
||||
-- bad keyword
|
||||
drop tuple rule nonesuch;
|
||||
ERROR: parser: parse error at or near "tuple"
|
||||
-- no such rule
|
||||
drop instance rule nonesuch;
|
||||
drop instance rule nonesuch on noplace;
|
||||
ERROR: parser: parse error at or near "instance"
|
||||
-- no such rule
|
||||
drop rewrite rule nonesuch;
|
||||
|
||||
@@ -648,8 +648,8 @@ select * from rtest_order2;
|
||||
---+---+-------------------------------------
|
||||
1 | 1 | rule 2 - this should run 1st
|
||||
1 | 2 | rule 4 - this should run 2nd
|
||||
1 | 3 | rule 3 - this should run 3rd or 4th
|
||||
1 | 4 | rule 1 - this should run 3rd or 4th
|
||||
1 | 3 | rule 1 - this should run 3rd or 4th
|
||||
1 | 4 | rule 3 - this should run 3rd or 4th
|
||||
(4 rows)
|
||||
|
||||
--
|
||||
@@ -1173,7 +1173,7 @@ select * from foo;
|
||||
1001
|
||||
(1 row)
|
||||
|
||||
drop rule foorule;
|
||||
drop rule foorule on foo;
|
||||
-- this should fail because f1 is not exposed for unqualified reference:
|
||||
create rule foorule as on insert to foo where f1 < 100
|
||||
do instead insert into foo2 values (f1);
|
||||
@@ -1196,7 +1196,7 @@ select * from foo2;
|
||||
2
|
||||
(1 row)
|
||||
|
||||
drop rule foorule;
|
||||
drop rule foorule on foo;
|
||||
drop table foo;
|
||||
drop table foo2;
|
||||
--
|
||||
@@ -1256,7 +1256,7 @@ select * from cchild;
|
||||
2 | test2
|
||||
(2 rows)
|
||||
|
||||
drop rule rrule;
|
||||
drop rule rrule on vview;
|
||||
drop view vview;
|
||||
drop table pparent;
|
||||
drop table cchild;
|
||||
@@ -1268,7 +1268,7 @@ SELECT viewname, definition FROM pg_views ORDER BY viewname;
|
||||
--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
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.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_rules | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename !~ '^_RET'::text);
|
||||
pg_stat_activity | SELECT d.oid AS datid, d.datname, pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_userid(s.backendid) AS usesysid, u.usename, pg_stat_get_backend_activity(s.backendid) AS current_query FROM pg_database d, (SELECT pg_stat_get_backend_idset() AS backendid) s, pg_shadow u WHERE ((pg_stat_get_backend_dbid(s.backendid) = d.oid) AND (pg_stat_get_backend_userid(s.backendid) = u.usesysid));
|
||||
pg_stat_all_indexes | SELECT c.oid AS relid, i.oid AS indexrelid, c.relname, i.relname AS indexrelname, pg_stat_get_numscans(i.oid) AS idx_scan, pg_stat_get_tuples_returned(i.oid) AS idx_tup_read, pg_stat_get_tuples_fetched(i.oid) AS idx_tup_fetch FROM pg_class c, pg_class i, pg_index x WHERE (((c.relkind = 'r'::"char") AND (x.indrelid = c.oid)) AND (x.indexrelid = i.oid));
|
||||
pg_stat_all_tables | SELECT c.oid AS relid, c.relname, pg_stat_get_numscans(c.oid) AS seq_scan, pg_stat_get_tuples_returned(c.oid) AS seq_tup_read, sum(pg_stat_get_numscans(i.indexrelid)) AS idx_scan, sum(pg_stat_get_tuples_fetched(i.indexrelid)) AS idx_tup_fetch, pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins, pg_stat_get_tuples_updated(c.oid) AS n_tup_upd, pg_stat_get_tuples_deleted(c.oid) AS n_tup_del FROM (pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) WHERE (c.relkind = 'r'::"char") GROUP BY c.oid, c.relname;
|
||||
@@ -1289,7 +1289,7 @@ SELECT viewname, definition FROM pg_views ORDER BY viewname;
|
||||
pg_stats | SELECT c.relname AS tablename, a.attname, s.stanullfrac AS null_frac, s.stawidth AS avg_width, s.stadistinct AS n_distinct, CASE WHEN (1 = s.stakind1) THEN s.stavalues1 WHEN (1 = s.stakind2) THEN s.stavalues2 WHEN (1 = s.stakind3) THEN s.stavalues3 WHEN (1 = s.stakind4) THEN s.stavalues4 ELSE NULL::"_text" END AS most_common_vals, CASE WHEN (1 = s.stakind1) THEN s.stanumbers1 WHEN (1 = s.stakind2) THEN s.stanumbers2 WHEN (1 = s.stakind3) THEN s.stanumbers3 WHEN (1 = s.stakind4) THEN s.stanumbers4 ELSE NULL::"_float4" END AS most_common_freqs, CASE WHEN (2 = s.stakind1) THEN s.stavalues1 WHEN (2 = s.stakind2) THEN s.stavalues2 WHEN (2 = s.stakind3) THEN s.stavalues3 WHEN (2 = s.stakind4) THEN s.stavalues4 ELSE NULL::"_text" END AS histogram_bounds, CASE WHEN (3 = s.stakind1) THEN s.stanumbers1[1] WHEN (3 = s.stakind2) THEN s.stanumbers2[1] WHEN (3 = s.stakind3) THEN s.stanumbers3[1] WHEN (3 = s.stakind4) THEN s.stanumbers4[1] ELSE NULL::float4 END AS correlation FROM pg_class c, pg_attribute a, pg_statistic s WHERE ((((c.oid = s.starelid) AND (c.oid = a.attrelid)) AND (a.attnum = s.staattnum)) AND has_table_privilege(c.oid, 'select'::text));
|
||||
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, pg_shadow.useconfig 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.relkind = 'v'::"char");
|
||||
pg_views | SELECT n.nspname AS schemaname, c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.oid) AS definition FROM (pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) 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)));
|
||||
|
||||
@@ -239,13 +239,13 @@ drop rule;
|
||||
drop rule 314159;
|
||||
|
||||
-- no such rule
|
||||
drop rule nonesuch;
|
||||
drop rule nonesuch on noplace;
|
||||
|
||||
-- bad keyword
|
||||
drop tuple rule nonesuch;
|
||||
|
||||
-- no such rule
|
||||
drop instance rule nonesuch;
|
||||
drop instance rule nonesuch on noplace;
|
||||
|
||||
-- no such rule
|
||||
drop rewrite rule nonesuch;
|
||||
|
||||
@@ -699,7 +699,7 @@ insert into foo values(1);
|
||||
insert into foo values(1001);
|
||||
select * from foo;
|
||||
|
||||
drop rule foorule;
|
||||
drop rule foorule on foo;
|
||||
|
||||
-- this should fail because f1 is not exposed for unqualified reference:
|
||||
create rule foorule as on insert to foo where f1 < 100
|
||||
@@ -714,7 +714,7 @@ insert into foo values(100);
|
||||
select * from foo;
|
||||
select * from foo2;
|
||||
|
||||
drop rule foorule;
|
||||
drop rule foorule on foo;
|
||||
drop table foo;
|
||||
drop table foo2;
|
||||
|
||||
@@ -751,7 +751,7 @@ update vview set descrip='test3' where pid=3;
|
||||
select * from vview;
|
||||
select * from cchild;
|
||||
|
||||
drop rule rrule;
|
||||
drop rule rrule on vview;
|
||||
drop view vview;
|
||||
drop table pparent;
|
||||
drop table cchild;
|
||||
|
||||
Reference in New Issue
Block a user