首先,我启用了ON_ERROR_STOP以在错误发生后立即停止执行,如下所示:
\set ON_ERROR_STOP on
因为文档关于
ON_ERROR_STOP
说如下:
默认情况下,命令处理在发生错误后继续。当此变量设置为打开时,处理将立即停止
因此,我创建了带有
test
列的 num
表,然后插入 num
为 0
的行,如下所示:
CREATE TABLE test (
num INTEGER
);
INSERT INTO test (num) VALUES (0);
然后,我运行了使用
RAISE 语句引发
INFO
错误的脚本,然后将 num
表中的 test
加 1,如下所示。 *我不仅尝试了 INFO
错误,还尝试了 DEBUG
、LOG
、NOTICE
、WARNING
和 EXCEPTION
错误以及 RAISE
语句:
DO LANGUAGE plpgsql $$
BEGIN
RAISE INFO 'A custom error!';
UPDATE test SET num = num + 1;
END
$$;
但是,
num
增加到 1
,如下所示。 *num
未增加到 1
,仅出现 EXCEPTION
错误:
postgres=# SELECT num FROM test;
num
-----
1
(1 row)
那么,如何使
ON_ERROR_STOP
与 RAISE
语句正确配合使用?
试试这个:
DO LANGUAGE plpgsql $$
Declare a number:=1;
BEGIN
a:=a/0;
--the below lines after would not be
--processed
RAISE INFO 'A custom error!';
UPDATE test SET num = num + 1;
END
$$;