八月 21, 2023
摘要:在本教程中,您将了解 PostgreSQL 断言语句以及如何使用它进行调试。
请注意,PostgreSQL 从 9.5 版本开始引入
assert
语句。使用前检查您的 PostgreSQL 版本。
断言语句简介
assert
语句是将调试检查插入 PL/pgSQL 代码的有用简写。
下面说明了assert
语句的语法:
assert condition [, message];
在这个语法中:
1) 条件
condition
是一个布尔表达式,预期始终返回true
。
如果condition
计算结果为true
,则该assert
语句不执行任何操作。
如果condition
计算结果为false
或null
,PostgreSQL 会引发assert_failure
异常。
2) 消息
message
是可选的。
如果不传递message
,PostgreSQL 默认使用 “assertion failed
” 消息。如果您将message
传递给assert
语句,它将使用它来替换默认消息。
请注意,您应只使用
assert
语句来检测错误,而不是用于报告。要报告消息或错误,请使用raise
语句。
启用/禁用断言
PostgreSQL 提供了plpgsql.check_asserts
配置参数来启用或禁用断言测试。如果将此参数设置为off
,则断言语句将不执行任何操作。
PostgreSQL 断言语句示例
以下示例使用assert
语句检查示例数据库中的film
表是否有数据:
do $$
declare
film_count integer;
begin
select count(*)
into film_count
from film;
assert film_count > 0, 'Film not found, check the film table';
end$$;
由于film
表有数据,所以该代码块没有发出任何消息。
以下示例会发出错误,因为film
表中的电影数量不大于1,000
。
do $$
declare
film_count integer;
begin
select count(*)
into film_count
from film;
assert film_count > 1000, '1000 Film found, check the film table';
end$$;
输出:
ERROR: 1000 Film found, check the film table
CONTEXT: PL/pgSQL function inline_code_block line 9 at ASSERT
SQL state: P0004
概括
-
使用
assert
语句向 PL/pgSQL 代码添加调试检查。 -
assert
语句计算预期结果为true
的condition
,并在结果值为false
或null
的情况下发出错误。 -
assert
语句仅用于检测错误。要报告普通消息和错误,请改用raise
语句。