PostgreSQL 教程: PL/pgSQL assert 断言语句

八月 21, 2023

摘要:在本教程中,您将了解 PostgreSQL 断言语句以及如何使用它进行调试。

请注意,PostgreSQL 从 9.5 版本开始引入assert语句。使用前检查您的 PostgreSQL 版本。

断言语句简介

assert语句是将调试检查插入 PL/pgSQL 代码的有用简写。

下面说明了assert语句的语法:

assert condition [, message];

在这个语法中:

1) 条件

condition是一个布尔表达式,预期始终返回true

如果condition计算结果为true,则该assert语句不执行任何操作。

如果condition计算结果为falsenull,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语句计算预期结果为truecondition,并在结果值为falsenull的情况下发出错误。

  • assert语句仅用于检测错误。要报告普通消息和错误,请改用raise语句。