PostgreSQL,删除自定义函数
为了从pgdump恢复数据,我需要从数据库中删除自定义函数。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
此功能可以很好地识别它们:
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';