pg_rules 是一个 系统目录 视图,列出了查询重写规则。 pg_rules 扩展了底层系统目录表 pg_rewrite,以提供重写规则的可读表示。
pg_rules 添加于 PostgreSQL 6.4。
按 PostgreSQL 版本定义
pg_rules (PostgreSQL 19)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 18)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 17)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 16)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 15)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 14)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 13)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 12)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 11)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 10)
View "pg_catalog.pg_rules"
Column | Type | Collation | Nullable | Default
------------+------+-----------+----------+---------
schemaname | name | | |
tablename | name | | |
rulename | name | | |
definition | text | | |
文档: pg_rules
pg_rules (PostgreSQL 9.6)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 9.5)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 9.4)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 9.3)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 9.2)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 9.1)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 9.0)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
文档: pg_rules
pg_rules (PostgreSQL 8.4)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
View definition:
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 <> '_RETURN'::name;
文档: pg_rules
pg_rules (PostgreSQL 8.3)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
View definition:
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 <> '_RETURN'::name;
文档: pg_rules
pg_rules (PostgreSQL 8.2)
View "pg_catalog.pg_rules"
Column | Type | Modifiers
------------+------+-----------
schemaname | name |
tablename | name |
rulename | name |
definition | text |
View definition:
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 <> '_RETURN'::name;
文档: pg_rules
变更历史
- PostgreSQL 7.3
- 添加了列
schemaname(提交 3b78826b)
- 添加了列
- PostgreSQL 6.4
示例
创建以下规则后
postgres=# CREATE RULE foobar AS ON INSERT TO foo WHERE NEW.id % 2 = 1 DO INSTEAD NOTHING; CREATE RULE
pg_rules 中存在以下记录
postgres=# SELECT * FROM pg_rules WHERE rulename='foobar'\gx
-[ RECORD 1 ]-----------------------------------------------
schemaname | public
tablename | foo
rulename | foobar
definition | CREATE RULE foobar AS +
| ON INSERT TO public.foo +
| WHERE ((new.id % 2) = 1) DO INSTEAD NOTHING;
默认情况下,pg_settings 视图始终存在两条规则
postgres=# SELECT * FROM pg_rules\gx
-[ RECORD 1 ]-------------------------------------------------------------------------------------------------
schemaname | pg_catalog
tablename | pg_settings
rulename | pg_settings_u
definition | CREATE RULE pg_settings_u AS +
| ON UPDATE TO pg_catalog.pg_settings +
| WHERE (new.name = old.name) DO SELECT set_config(old.name, new.setting, false) AS set_config;
-[ RECORD 2 ]-------------------------------------------------------------------------------------------------
schemaname | pg_catalog
tablename | pg_settings
rulename | pg_settings_n
definition | CREATE RULE pg_settings_n AS +
| ON UPDATE TO pg_catalog.pg_settings DO INSTEAD NOTHING;
参考资料
- PostgreSQL 文档: pg_rules
