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()”的任何评论、建议或更正 此处