检测所有“事件”;参数被多次使用;在Pl/pgSQL函数中

检测所有“事件”;参数被多次使用;在Pl/pgSQL函数中,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我正在将我的数据库从8.4服务器移动到新的9.1服务器 在9.1服务器中还原8.4副本不会引发任何错误,但一旦我开始使用plpgsql函数,我就遇到了“参数被多次使用”错误,9.1似乎不允许在输入和输出时使用相同的名称,例如: CREATE FUNCTION sales_tax(IN total int, OUT total int) 8.4中允许,但9.1中不允许。使用相同的名称并不是故意的,我通常为同一个objet参数定义IN,为param定义out,但有时会忽略下划线的位置 我尝试过使用

我正在将我的数据库从8.4服务器移动到新的9.1服务器

在9.1服务器中还原8.4副本不会引发任何错误,但一旦我开始使用plpgsql函数,我就遇到了“参数被多次使用”错误,9.1似乎不允许在输入和输出时使用相同的名称,例如:

CREATE FUNCTION sales_tax(IN total int, OUT total int)
8.4中允许,但9.1中不允许。使用相同的名称并不是故意的,我通常为同一个objet参数定义IN,为param定义out,但有时会忽略下划线的位置

我尝试过使用pg_restore v8.4和pg_restore v9.1,甚至在一个空数据库上进行还原,但它从未抛出错误
@CREATE FUNCTION
,在还原时不会像您尝试在9.1中使用重复的参数名创建新的funct那样对其进行“评估”

所以我的问题是,有没有任何简单的脚本可以找到我所有不兼容的9.1函数


我无法逐一查看,太多了。

此对系统目录的查询将报告具有重复参数名称的所有函数(每个重复名称一行):

值得注意的是,有一个内置的Postgres函数具有重复的参数名:。不要碰这个

这种奇怪的现象以前就有人提出过,Daniel给出了一些解释:


我真的认为这个问题应该解决。即使不会造成伤害,这也是一个糟糕的例子,令人困惑。

有内部postgres表/视图存储函数名/参数/实体。。。您是否检查过是否有可能解决此表的问题?FWIW,您需要单个
INOUT
参数,但我认为您已经解决了这个问题,只需要确定所有需要更改的事件。Thks感谢您花时间回答,但我结束了对所有函数的逐一测试和修复:)
SELECT proname, pg_get_function_identity_arguments(oid) AS f_identity_arguments
     , arg, count(*) AS ct
FROM   pg_proc p
      ,unnest(p.proargnames) arg
GROUP  BY oid, proname, arg
HAVING count(*) > 1
ORDER  BY 1, 2, ct DESC;