pg_get_ruledef()
是一个系统函数,用于重现用于创建规则的命令。
pg_get_ruledef()
添加于 PostgreSQL 6.4。
用法
pg_get_ruledef (rule
oid
[,pretty
boolean
] ) →text
默认情况下,规则创建命令以适合包含在 pg_dump 输出中的详细格式返回,但是如果 pretty
参数(默认值:false
)设置为 true,则命令将以更紧凑、更易于阅读的格式生成。
请注意,生成的命令是反编译后的重构,而不是命令最初定义时的文本。
从 PostgreSQL 16 开始,pg_get_ruledef()
会为视图和物化视图发出 ON SELECT
的定义,但是发出的 SQL 无法执行,因为不再允许手动创建 ON SELECT
规则。
在内部,pg_get_ruledef()
由系统视图 pg_rules
使用,以生成比底层 pg_rewrite
系统表提供的更友好的规则表示形式。
更改历史记录
- PostgreSQL 7.4
- 添加了
pretty
选项(提交 52347b66)
- 添加了
- PostgreSQL 6.4
- 添加(提交 15cb32d9)
示例
给定如下生成的规则
postgres=# CREATE RULE foobar AS ON INSERT TO foo WHERE NEW.id % 2 = 1 DO INSTEAD NOTHING; CREATE RULE
pg_get_ruledef()
将命令重现为以下任一形式:
postgres=# SELECT pg_get_ruledef(oid) FROM pg_rewrite WHERE rulename='foobar'; pg_get_ruledef ------------------------------------------------- CREATE RULE foobar AS + ON INSERT TO public.foo + WHERE ((new.id % 2) = 1) DO INSTEAD NOTHING; (1 row)
或
postgres=# SELECT pg_get_ruledef(oid, true) FROM pg_rewrite WHERE rulename='foobar'; pg_get_ruledef ----------------------------------------------- CREATE RULE foobar AS + ON INSERT TO foo + WHERE (new.id % 2) = 1 DO INSTEAD NOTHING; (1 row)
参考文献
- PostgreSQL 文档: 系统目录信息函数