2

psql提示符下(或在脚本文件中),我正在做一个(这仅用于说明目的):

CREATE OR REPLACE FUNCTION FOO() RETURNS VOID AS 'BEGIN SELECT 1 FROM doesntexist; END;' LANGUAGE plpgsql;

...表doesntexist不存在的地方。该函数的创建没有任何抱怨,只有在调用它时才会失败:

test=> select foo() ;
ERROR:  relation "doesntexist" does not exist
...

我怎样才能改变这种行为,以便我可以确信一旦我的脚本被执行,就不会潜伏这种类型的错误?

4

1 回答 1

2

你不能。不适用于当前的 PL/pgSQL。它不会在编译时检查标识符。

调用该函数一次进行检查。在事务中执行并回滚以避免副作用:

BEGIN;
SELECT foo();
ROLLBACK;

已经尝试过提供更严格的变体,主要是 Pavel Stehule,但我不知道它们有多成熟。

于 2013-09-13T17:51:10.263 回答