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_rewrite, pg_rules

反馈

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