↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

19.8. 错误和消息 #

使用 RAISE 语句报告消息和引发错误。

RAISE level 'format' [, variable [...]];

可能的级别有 DEBUG(把消息写入服务器日志)、 LOG(把消息以更高的优先级写入服务器日志)、 INFO、NOTICE 和 WARNING(把消息写入服务器日志并发送给客户端, 优先级依次更高)以及 EXCEPTION(引发错误并中止 当前事务)。特定优先级的错误消息是被报告给客户端、写入服务器日志 还是两者都做,由 SERVER_MIN_MESSAGES 和 CLIENT_MIN_MESSAGES 配置变量控制。更多信息参见 PostgreSQL 管理员指南。

在格式字符串内部,% 被下一个可选参数的外部表示 替换。写 %% 可以输出字面的 %。 注意,可选参数目前必须是简单变量而不是表达式,格式必须是简单的字符 串字面量。

例子:

RAISE NOTICE ''Calling cs_create_job(%)'',v_job_id;

在这个例子中,v_job_id 的值将替换字符串中的 %。

RAISE EXCEPTION ''Inexistent ID --> %'',user_id;

这将以给定的错误消息中止事务。

19.8.1. 异常 #

PostgreSQL 没有一个非常聪明的异常处理 模型。每当解析器、规划器/优化器或执行器断定一条语句无法再处理下去时, 整个事务都会被中止,系统跳回主循环以从客户端应用程序获取下一条查询。

可以挂钩到错误机制中来注意到这种情况的发生。但目前无法知道到底是什么 导致了中止(输入/输出转换错误、浮点错误、解析错误)。而且此时数据 库后端有可能处于不一致状态,因此返回上层执行器或发出更多命令可能会 损坏整个数据库。

因此,PL/pgSQL 目前在函数或触发器过程 执行期间遇到中止时所做的唯一事情,就是写一些额外的 NOTICE 级别日志消息,说明这发生在哪个函数中以及 哪里(行号和语句类型)。该错误总是会停止函数的执行。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。