Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL,删除自定义函数_Postgresql - Fatal编程技术网

PostgreSQL,删除自定义函数

PostgreSQL,删除自定义函数,postgresql,Postgresql,为了从pgdump恢复数据,我需要从数据库中删除自定义函数。 此功能可以很好地识别它们: SELECT pp.proname FROM pg_proc pp INNER JOIN pg_namespace pn on (pp.pronamespace = pn.oid) INNER JOIN pg_language pl on (pp.prolang = pl.oid) WHERE pl.lanname NOT IN ('c','internal') AND pn.nspnam

为了从pgdump恢复数据,我需要从数据库中删除自定义函数。
此功能可以很好地识别它们:

SELECT pp.proname
  FROM pg_proc pp
 INNER JOIN pg_namespace pn on (pp.pronamespace = pn.oid)
 INNER JOIN pg_language pl on (pp.prolang = pl.oid)
 WHERE pl.lanname NOT IN ('c','internal') 
   AND pn.nspname NOT LIKE 'pg_%'
   AND pn.nspname <> 'information_schema';
现在仍然存在一个问题,我不知道如何将这些放在函数代码中,函数代码将向func_rec.funcname添加所需的参数,以便删除这些函数


因此,请帮助获取从所有函数中删除自定义函数的查询

因为函数可以在Postgres中重载,所以需要在
下拉列表中包含函数的签名

假设您具有以下功能:

get_answer(p1 integer);
get_answer(p1 integer, p2 integer);
当使用
drop函数get_-answer时,Postgres就不知道该删除哪一个

幸运的是,Postgres有一个函数来格式化参数,以便它们可以用于此目的:
pg\u get\u function\u identity\u arguments

因此,您需要将选择更改为:

SELECT pp.proname||'('||pg_get_function_identity_arguments(pp.oid)||')' as funcname
  FROM pg_proc pp
 INNER JOIN pg_namespace pn on (pp.pronamespace = pn.oid)
 INNER JOIN pg_language pl on (pp.prolang = pl.oid)
 WHERE pl.lanname NOT IN ('c','internal') 
   AND pn.nspname NOT LIKE 'pg_%'
   AND pn.nspname <> 'information_schema';
选择pp.proname | |'(“| | pg|u get_function_identity_arguments(pp.oid)| |')作为函数名
来自pg_程序pp
内部连接pg_命名空间pn on(pp.pronamespace=pn.oid)
内部连接pg_语言pl on(pp.prolang=pl.oid)
其中pl.lanname不在('c','internal')中
和pn.nspname不象'pg_u%'
和pn.nspname“信息_模式”;

是的,现在可以完全按照预期和需要工作了。来自pgAdmin和.NET。由于我的程序在启动时自动创建了这些函数(如果不存在的话),现在我再次清理了情况,以便在没有任何可靠的作业/问题的情况下用这些函数捕获备份。非常感谢。
get_answer(p1 integer);
get_answer(p1 integer, p2 integer);
SELECT pp.proname||'('||pg_get_function_identity_arguments(pp.oid)||')' as funcname
  FROM pg_proc pp
 INNER JOIN pg_namespace pn on (pp.pronamespace = pn.oid)
 INNER JOIN pg_language pl on (pp.prolang = pl.oid)
 WHERE pl.lanname NOT IN ('c','internal') 
   AND pn.nspname NOT LIKE 'pg_%'
   AND pn.nspname <> 'information_schema';