PostgreSQL 获取函数定义pg_get_functiondef()

PostgreSQL 支持创建自定义函数,在 psql 中执行 \df 可以看到创建的自定义函数信息,如下

postgres=# \df
                           List of functions
 Schema |     Name      | Result data type | Argument data types | Type
--------+---------------+------------------+---------------------+------
 public | myfunc_insert | trigger          |                     | func
(1 row)

以上可以看到函数名称等信息,但是看不到函数详细的定义信息,此时可通过 pg_get_functiondef() 系统函数来获取函数的详细定义信息,如下:

postgres=# select pg_get_functiondef('myfunc_insert'::regproc::oid);
                    pg_get_functiondef
-----------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.myfunc_insert()        +
  RETURNS trigger                                         +
  LANGUAGE plpgsql                                        +
 AS $function$                                            +
    begin                                                 +
       insert into t2(id, name) values (new.id, new.name);+
       return new;                                        +
    end;                                                  +
 $function$                                               +

(1 row)

pg_get_functiondef() 函数实际上是根据元数据信息重建函数或存储过程的创建命令,这是一个反编译的重建,而不是命令的原始文本。该函数参数为 oid,返回结果是一个完整的 CREATE OR REPLACE FUNCTION 或 CREATE OR REPREPLACE PROCEDURE 语句。

文章评论

0条评论