PostgreSQL Assert怎么用?如何在代码中添加断言验证?

文章导读
Previous Quiz Next 在 PostgreSQL 中,Assert 语句 主要与 PL/pgSQL 函数或过程一起使用,在运行时执行条件检查。
📋 目录
  1. 语法
  2. ASSERT 语句示例
A A

PostgreSQL - Assert



Previous
Quiz
Next

在 PostgreSQL 中,Assert 语句 主要与 PL/pgSQL 函数或过程一起使用,在运行时执行条件检查。

ASSERT 语句主要用于调试、数据约束和业务规则。当断言失败时,PostgreSQL 会引发一个异常,该异常可以在 PL/pgSQL 块中捕获和处理。

语法

以下是 PostgreSQL Assert 语句的语法 −

ASSERT condition [message];

ASSERT 语句示例

这里,我们提供一些基本示例来理解其实际用法。

示例 1

在本示例中,我们编写查询来检查一个数字是否为正数。

DO $$ 
BEGIN 
  ASSERT 10 > 0, 'Number is not positive'; 
  RAISE NOTICE 'Number is positive'; 
END $$;

上述查询生成以下结果 −

check_positive_number_in_postgreSQL

示例 2

这里,我们展示验证除以零的示例。

DO $$ 
DECLARE x INT := 20;
BEGIN 
  ASSERT x <> 0, 'Cannot divide by zero'; 
  RAISE NOTICE 'Valid number for division';
END $$;

上述查询得到以下结果 −

validate_division_by_zero

示例 3

这是第三个示例,我们通过生成条件来说明人员的年龄约束。

DO $$ 
DECLARE age INT := 20;
BEGIN 
  ASSERT age >= 18, 'Person is under age'; 
  RAISE NOTICE 'Person is an adult';
END $$;

上述查询得到以下结果 −

person_age_containts_in_postgresql

示例 4

一个函数计算某个部门员工的总薪资。您需要确保传递给函数的部门 ID 是正确的。

CREATE OR REPLACE FUNCTION cal_total_salary(department_id INT)
RETURN NUMERIC AS $$
DECLARE
       total_salary NUMERIC :=0;
BEGIN
     ASSERT EXISTS (SELECT 1 FROM EMPLOYEES WHERE employees.department_id = cal_total_salary.department_id);
     SELECT SUM(salary) INTO total_salary FROM employees WHERE employees.department_id - cal_total_salary.department_id);
     RETURN total_salary;
end;
$$ LANGUAGE plpgsql;
      
SELECT cal_total_salary(5);

上述查询得到以下结果 −

ERROR: assertion failed
CONTEXT: PL/pgSQL function cal_total_salary(integer) line 5 at ASSERT 

SQL state: P8884

因此,当需要在函数或事务中检查条件时,您可以使用 ASSERT 语句。它有助于识别现有查询中使用的错误。