📜  PostgreSQL – 错误和消息

📅  最后修改于: 2022-05-13 01:57:15.625000             🧑  作者: Mango

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 WARNINGNOTICE级别的消息会报告给客户端。这是由 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 $$;

输出: