PostgreSQL – 断言
PostgreSQL提供了 ASSERT 语句,用于在 PL/pgSQL 代码中插入重要的调试检查。它是检查逻辑错误的重要工具,可用于识别与编写代码相关的问题。
Syntax: assert condition [, message];
如果我们分析上面的语法:
- 条件:条件是一个布尔表达式,应该返回真。
如果条件返回 true,assert 语句什么也不做,程序继续运行。
但是,如果条件被评估为 false 或 null,则会引发ASSERT_FAILURE 异常。
(如果我们在评估条件时遇到错误,则将其报告为正常错误。) - 消息:消息是一个可选部分,它是一个表达式,如果条件失败,其结果(如果不为空)将替换默认错误消息文本“断言失败”。消息表达式仅在断言失败的情况下被评估,而不在断言成功的正常情况下被评估。
重要的是要注意 ASSERT 用于检测程序错误,而不是用于报告普通错误情况。在报告错误的情况下,必须使用 RAISE 关键字。
首先,我们使用以下命令创建一个示例表来执行示例:
CREATE TABLE employees (
employee_id serial PRIMARY KEY,
full_name VARCHAR NOT NULL,
manager_id INT
);
然后我们将数据插入到我们的员工表中,如下所示:
INSERT INTO employees (
employee_id,
full_name,
manager_id
)
VALUES
(1, 'M.S Dhoni', NULL),
(2, 'Sachin Tendulkar', 1),
(3, 'R. Sharma', 1),
(4, 'S. Raina', 1),
(5, 'B. Kumar', 1),
(6, 'Y. Singh', 2),
(7, 'Virender Sehwag ', 2),
(8, 'Ajinkya Rahane', 2),
(9, 'Shikhar Dhawan', 2),
(10, 'Mohammed Shami', 3),
(11, 'Shreyas Iyer', 3),
(12, 'Mayank Agarwal', 3),
(13, 'K. L. Rahul', 3),
(14, 'Hardik Pandya', 4),
(15, 'Dinesh Karthik', 4),
(16, 'Jasprit Bumrah', 7),
(17, 'Kuldeep Yadav', 7),
(18, 'Yuzvendra Chahal', 8),
(19, 'Rishabh Pant', 8),
(20, 'Sanju Samson', 8);
表格是:
示例 1:
下面的查询用于检查我们的表是否有一条或多条记录。
do $$
declare
employee_count integer;
begin
select count(*)
into employee_count
from employees;
assert employee_count > 0, 'Check for Empty Employee Table';
end$$;
输出:
由于表的大小大于 0,因此断言为真,因此不会打印任何错误消息。
示例 2:
下面的查询用于检查我们的表是否有 1 条或多于 100 条记录。
do $$
declare
employee_count integer;
begin
select count(*)
into employee_count
from employees;
assert employee_count > 100, '100 employee count found';
end$$;
输出:
由于表的大小小于 100,因此断言失败,因此会打印一条错误消息。