Postgresql - 编辑功能签名

时间:2010-05-11 13:46:58

标签: postgresql stored-procedures function

POSTGRESQL 8.4.3 - 我使用此签名创建了一个函数

创建或替换功能logcountforlasthour()   RETURNS SETOF记录AS

意识到我想把它改成这个

创建或替换功能logcountforlasthour()   RETURNS TABLE(ip bigint,count bigint)记录AS

但是当我在查询工具中应用该更改时,它不被接受或者被接受,没有语法错误,但函数的文本没有被更改。 即使我在编辑之间运行“DROP FUNCTION logcountforlasthour()”,旧语法也会回来

如果我编辑函数的主体,那很好,它会改变而不是签名

有什么我缺少的

感谢

1 个答案:

答案 0 :(得分:1)

来自PostgreSQL 8.4 manual

  

替换当前的定义   现有函数,使用CREATE OR   更换功能。 这是不可能的   更改名称或参数类型   这种方式的功能(如果你试过,   你真的会创建一个新的,   独特的功能)。另外,创建或   更换功能不会让你   更改现有的返回类型   功能。要做到这一点,你必须放弃   并重新创建该功能。 (使用时   OUT参数,表示你不能   更改任何OUT的名称或类型   参数除了掉落之外   功能。)

     

如果你放弃然后重新创建一个   功能,新功能不是   与旧的同一实体;你将会有   删除现有规则,视图,   引用旧的触发器等   功能。使用CREATE OR REPLACE   功能改变功能   定义而不破坏对象   指的是功能。也,   ALTER FUNCTION可用于更改   大多数的辅助属性   现有功能。

     

创建该功能的用户   成为该职能的所有者。

并注意:

  

...   PostgreSQL允许函数重载;也就是说,相同的名称可以用于几个   不同的函数,只要它们有不同的参数类型。