我有一個PostgreSQL功能,其中只有一個SELECT語句:警告在PostgreSQL功能
CREATE OR REPLACE FUNCTION fun_test()
RETURNS INTEGER AS $$
DECLARE size INTEGER;
BEGIN
SELECT COUNT(*) INTO size FROM tab;
RETURN size;
END;
$$ LANGUAGE plpgsql STABLE;
當我打電話與功能:
SELECT fun_test()
雖然結果是正確的,就會有太多的警告:
WARNING: A stable or volatile function is used as if it is immutable
HINT: The function should be declared as stable or volatile in create function statement.
我發現PostgreSQL的文檔STABLE是,其結果取決於數據庫查找,參數變量(比如當前時區)功能的適當選擇等http://www.postgresql.org/docs/8.2/static/sql-createfunction.html
我的問題是在警告從何而來?看來我正在做文件要求做的事情。任何幫助表示讚賞。
編輯:
我使用PostgreSQL服務器8.2.15
原委:
CREATE TABLE algo.chengb_tmp
(
userid INT,
username varchar(100)
)
CREATE OR REPLACE FUNCTION algo.chengb_fun_test()
RETURNS INTEGER AS $$
DECLARE size INTEGER;
BEGIN
SELECT COUNT(*) INTO size FROM algo.chengb_tmp;
RETURN size;
END;
$$ LANGUAGE plpgsql STABLE;
SELECT algo.chengb_fun_test()
成
您是否意外鏈接到過時的版本8.2或者是您的實際版本?如果是這樣,請先升級到更新的版本。 [8.2已於2011年12月達到其使用壽命。](http://www.postgresql.org/support/versioning/) –
是的,我使用的是8.2.15版本。這個警告是否在更高版本中被刪除? – cheng
我不能保證警告會隨着當前版本消失,但很可能會發生。如果您的問題更新現在顯示整個故事,我至少可以保證相同的設置不會在我的9.1.4安裝中發出警告。無法在8.2上進行測試,因爲...我當然沒有其他測試。如果您遇到8.2版本的問題,至少應升級到最新的可用次要版本,如推薦:8.2.23。而是安裝9.1。它在各個層面都好多了。 –