pg_get_ruledef()

用于重新创建创建规则时使用的命令的函数

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 系统表提供的更友好的规则表示。

更改历史

示例

给定如下生成的规则

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)

分类

规则系统函数

另请参见

pg_rewritepg_rules

反馈

提交任何关于 "pg_get_ruledef()" 的评论、建议或更正 此处