我有一个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。它在各个层面都好多了。 –