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 预期为的a true 并在条件为 false or 的情况下发出错误 null 。
  • 该 assert 语句仅用于检测错误。要报告普通消息和错误,请改用该 raise 语句。