IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    pg中drop function报错不存在

    Jimmy He发表于 2025-01-21 07:52:55
    love 0

    在pg中drop function会报错不存在,或者报错语法错误:

    mydb01=>drop function getcpumem;
    ERROR:Syntax error ator near";"
    LINE 1: drop function getcpumem;

    mydb01=>drop function getcpumem(integer,integer,integer,integer);
    ERROR:function getcpumem(integer,integer,integer,integer) does not exist
    mydb01=>

    在这里需要注意一下,drop function的时候,需要带上function中定义的各个变量的类型。语法是:
    DROP FUNCTION [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]
    [ CASCADE | RESTRICT ]

    在pg中,我们可以通过pg_proc看有哪些funcition,但是pg_proc中的变量类型,虽然在proargtypes中有记录,但是它是一个数字编码,需要通过::regtype[]来转换一下成可识别的类型。
    所以,你要先找出这个function的各个变量的类型,可以用下面的语句查找:

    SELECT proname, proargtypes::regtype[], nspname
    FROM pg_proc
    JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
    WHERE proname = 'getcpumem';

    此时运行

    drop function getcpumem(integer,numeric,numeric,varchar,integer,numeric,numeric);

    就可以正常删除了。



沪ICP备19023445号-2号
友情链接