Postgresql - 编辑函数签名

use*_*616 4 postgresql stored-procedures function

POSTGRESQL 8.4.3 - 我创建了一个具有此签名的函数

创建或替换函数 logcountforlasthour() 返回 SETOF 记录 AS

意识到我想把它改成这个

创建或替换函数 logcountforlasthour() 返回表(ip bigint, count bigint) 记录 AS

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

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

我有什么遗漏的吗

谢谢

Fra*_*ack 6

来自PostgreSQL 8.4 手册

要替换现有函数的当前定义,请使用 CREATE OR REPLACE FUNCTION。不可能以这种方式更改函数的名称或参数类型(如果您尝试过,您实际上会创建一个新的、不同的函数)。此外,CREATE OR REPLACE FUNCTION 不允许您更改现有函数的返回类型。为此,您必须删除并重新创建该函数。(使用 OUT 参数时,这意味着您无法更改任何 OUT 参数的名称或类型,除非删除该函数。)

如果删除然后重新创建一个函数,则新函数与旧函数不是同一实体;您必须删除引用旧函数的现有规则、视图、触发器等。使用 CREATE OR REPLACE FUNCTION 更改函数定义,而不会破坏引用该函数的对象。此外,ALTER FUNCTION 可用于更改现有函数的大多数辅助属性。

创建函数的用户成为该函数的所有者。

并且还要注意:

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