【发布时间】:2013-09-20 00:18:22
【问题描述】:
例如:
CREATE TABLE x (
val double);
CREATE FUNCTION g() RETURNS boolean AS $$
INSERT INTO x SELECT rand() RETURNING val>0.5;
$$ LANGUAGE SQL VOLATILE;
CREATE FUNCTION f() RETURNS boolean AS $$
SELECT g(); -- this is where the stability-violation happens
$$ LANGUAGE SQL STABLE; -- this is a lie
根据文档,f() 也应该标记为 VOLATILE,因为调用 f() 会产生副作用。 PostgreSQL 没有给出警告(或者更好的是,一个错误),这让我相信一定有一些原因允许这个“明显”的错误存在。
【问题讨论】:
-
是的,我读过那篇文章,但它没有提供允许“明显错误”的理由(据我所知)。我希望有人可以解释如何/何时不是错误。
标签: postgresql stored-procedures volatile