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