八月 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语句。