pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
使用 RAISE 语句报告消息和引发错误。
RAISElevel'format' [,variable[, ...]];
可能的级别有 DEBUG、LOG、 INFO、NOTICE、 WARNING 和 EXCEPTION。 EXCEPTION 引发错误并中止当前事务;其他级别只产生 不同优先级别的消息。特定优先级的消息是被报告给客户端、写入服务器 日志还是两者都做,由 log_min_messages 和 client_min_messages 配置变量控制。更多信息参见 第 16.4 节。
在格式字符串内部,% 被下一个可选参数的字符串表示 替换。写 %% 可以输出字面的 %。 注意,可选参数目前必须是简单变量而不是表达式,格式必须是简单的字符 串字面量。
在这个例子中,v_job_id 的值将替换字符串中的 %:
RAISE NOTICE ''Calling cs_create_job(%)'', v_job_id;
这个例子将以给定的错误消息中止事务:
RAISE EXCEPTION ''Inexistent ID --> %'', user_id;
PostgreSQL 没有一个非常聪明的异常处理 模型。每当解析器、规划器/优化器或执行器断定一条语句无法再处理下去时, 整个事务都会被中止,系统跳回主循环以从客户端应用程序获取下一条命令。
可以挂钩到错误机制中来注意到这种情况的发生。但目前无法知道到底是什么 导致了中止(数据类型格式错误、浮点错误、解析错误等)。而且此时数据 库服务器有可能处于不一致状态,因此返回上层执行器或发出更多命令可能 会损坏整个数据库。
因此,PL/pgSQL 目前在函数或触发器过程 执行期间遇到中止时所做的唯一事情,就是向消息添加一些字段,说明错误 发生在哪个函数中以及哪里(行号和语句类型)。该错误总是会停止函数的 执行。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。