2010-05-11 27 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