2010-05-11 63 views
1

的PostgreSQL 8.4.3 - 我创建了一个功能与此签名PostgreSQL的 - 编辑功能签名

CREATE OR REPLACE FUNCTION logcountforlasthour() RETURNS SETOF纪录

意识到我想将其更改为这个

CREATE OR REPLACE FUNCTION logcountforlasthour() RETURNS TABLE(IP BIGINT,计数BIGINT)AS

记录,但是当我申请的查询工具,改变它不是一个ccepted或者说它被接受,没有语法错误,但函数的文本没有改变。 即使我运行“DROP FUNCTION logcountforlasthour()”的编辑之间的旧语法回来

如果我编辑的函数体,多数民众赞成罚款,它改变但不签名

是不是我”中号失踪

感谢

+0

无论如何,你是否检查主pgAdmin窗口中的更改?尝试右键鼠标功能,然后选择刷新 – 2010-05-11 13:53:50

回答

1

PostgreSQL 8.4 manual

要更换的目前的定义现有功能,请使用CREATE OR REPLACE FUNCTION。 这是不可能的 以这种方式更改函数的名称或参数类型 (如果您尝试, 您实际上将创建一个新的, 不同的函数)。另外,CREATE OR REPLACE FUNCTION不会让您 更改现有 函数的返回类型。为此,您必须删除 并重新创建该功能。 (当使用 OUT参数,这意味着你不能 变化,除了通过降低 功能的任何OUT 参数的名称或类型。)

如果你删除然后重新创建一个 功能,新功能不 与旧的相同的实体;您将有 删除涉及旧功能的现有规则,视图, 触发器等。使用CREATE OR REPLACE FUNCTION更改功能 的定义而不会破坏引用该功能的对象 。另外, ALTER FUNCTION可用于更改 现有功能的大部分辅助属性。

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

还要注意:

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

+0

犯错!是的!我在编辑之间删除函数 – user250616 2010-05-11 15:00:19

+0

你正在使用哪些工具(psql,pgAdmin)? – 2010-05-12 09:21:37