PostgreSQL – 错误和消息
在本文中,我们将研究 PostgreSQL 中内置的错误以及通过 RAISE 语句在 PostgreSQL 中引发错误的过程,并使用ASSERT语句将调试检查插入到 PL/pgSQL 块中。
要引发错误消息,用户可以按如下方式实现 RAISE 语句:
Syntax: RAISE level format;
让我们更深入地研究 raise 语句。继RAISE语句是指定错误严重性级别选项。 PostgreSQL 提供以下级别:
- 调试
- 日志
- 注意
- 信息
- 警告
- 例外
如果用户不指定级别,默认情况下,RAISE 语句将使用引发错误并停止当前事务的 EXCEPTION 级别。我们将在下一节稍后讨论 RAISE EXCEPTION。
格式是指定消息的字符串。该格式使用百分比 (%) 占位符,这些占位符将被下一个参数替换。占位符的数量必须与参数的数量相匹配,否则PostgreSQL会报如下错误信息:
[Err] ERROR: too many parameters specified for RAISE
例子:
以下示例说明了当前报告不同消息的RAISE语句。
DO $$
BEGIN
RAISE INFO 'information message %', now() ;
RAISE LOG 'log message %', now();
RAISE DEBUG 'debug message %', now();
RAISE WARNING 'warning message %', now();
RAISE NOTICE 'notice message %', now();
END $$;
输出:
注意:并非所有消息都会报告给客户端,只有INFO 、 WARNING和NOTICE级别的消息会报告给客户端。这是由 client_min_messages和 log_min_messages配置参数。
引发错误:
要引发错误,请在RAISE语句之后使用EXCEPTION级别。请注意, RAISE语句默认使用EXCEPTION级别。除了引发错误之外,您还可以通过在RAISE语句中使用以下子句来添加更详细的信息:
USING option = expression
选项可以是以下任何一项:
- MESSAGE : 设置错误消息文本
- HINT :提供提示消息,以便更容易发现错误的根本原因。
- DETAIL :提供有关错误的详细信息。
- ERRCODE :标识错误代码,可以是条件名称,也可以是直接五字符的SQLSTATE代码。
示例 1:
DO $$
DECLARE
email varchar(255) := 'raju@geeksforgeeks.org';
BEGIN
-- check email for duplicate
-- ...
-- report duplicate email
RAISE EXCEPTION 'Duplicate email: %', email
USING HINT = 'Check the email again';
END $$;
输出:
示例 2:
以下示例说明了如何引发SQLSTATE及其相应的条件:
DO $$
BEGIN
--...
RAISE SQLSTATE '2210B';
END $$;
DO $$
BEGIN
--...
RAISE invalid_regular_expression;
END $$;
输出: