PL/pgSQL 断言语句
在本教程中,您将了解 PostgreSQL 断言语句以及如何将其用于调试目的。
摘要:在本教程中,您将了解 PostgreSQL 断言语句以及如何将其用于调试目的。
请注意,PostgreSQL assert 从 9.5 版开始引入了该语句。使用前请检查您的 PostgreSQL 版本。
assert 声明简介
该 assert 语句是将调试检查插入 PL/pgSQL 代码的有用简写。
下面说明了该 assert 语句的语法:
assert condition [, message];
在这个语法中:
条件
该 condition 是一个布尔表达式,预计将始终返回 true 。
如果 condition 计算结果为 true ,则该 assert 语句不执行任何操作。
如果 condition 计算结果为 false or null ,PostgreSQL 会引发 assert_failure 异常。
留言
该消息是可选的。
如果不传递 message ,PostgreSQL assertion failed 默认使用“ ”消息。如果您将 传递 message 给 assert 语句,它将使用它来替换默认消息。
请注意,您应该将该 assert 语句仅用于检测错误,而不是用于报告。要报告消息或错误,请改用该 raise 语句。
启用/禁用断言
PostgreSQL 提供了 plpgsql.check_asserts 配置参数来启用或禁用断言测试。如果将此参数设置为 off ,则 assert 语句将不执行任何操作。
PostgreSQL 断言语句示例
以下示例使用该 assert 语句检查 PostgreSQL Sakila 示例数据库中的 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表有数据,block没有发出任何消息。
以下示例发出错误,因为电影表中的电影数量不大于 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语句评估condition预期为的atrue并在条件为falseor 的情况下发出错误null。 - 该
assert语句仅用于检测错误。要报告普通消息和错误,请改用该raise语句。