返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

28.10. 注意信息处理

发布于 2019-09-30 03:08:14 字数 1903 浏览 1110 评论 0 收藏 0

服务器生成的注意信息和警告信息都不会由查询执行函数返回,因为他们并不蕴涵这查询的失败。它们会被传递给一个注意信息处理函数,然后在该处理返回之后继续正常执行。缺省的注意信息处理函数在 stderr 上打印该信息,但是应用可以通过提供自己的处理函数来覆盖这个行为。

犹豫历史原因,系统里存在两个级别的注意信息处理,分别叫做注意信息接收器和注意信息处理器。缺省的行为是注意信息接收器格式化注意信息然后给注意信息处理器传递一个字串进行打印。不过,对于自行处理这些事情的应用而言,通常是忽略注意信息处理器层,而只是在注意信息接收器里完成所有动作。

函数PQsetNoticeReceiver 为一个连接对象设置或者检查当前的注意信息接收器。类似的是PQsetNoticeProcessor设置或者检查当前的注意信息处理器。

typedef void (*PQnoticeReceiver) (void *arg, const PGresult *res);PQnoticeReceiverPQsetNoticeReceiver(PGconn *conn,                    PQnoticeReceiver proc,                    void *arg);typedef void (*PQnoticeProcessor) (void *arg, const char *message);PQnoticeProcessorPQsetNoticeProcessor(PGconn *conn,                     PQnoticeProcessor proc,                     void *arg);

这些函数逗返回前一个注意信息接收器或者处理器函数指针,然后设置新的数值。如果你提供一个空函数指针,那么就不会执行任何动作,但是返回当前指针。

当我们从服务器获取一个注意或者警告信息的时候,或者是收到 libpq内部生成的类似信息时,注意信息接收器函数将被调用。消息会以一个 PGRES_NONFATAL_ERRORPGresult的形式传递。(这就允许接收器用PQresultErrorField抽取独立的字段,或者用PQresultErrorMessage 完成预先格式化好的信息。)传递给PQsetNoticeReceiver 的同一个 void 指针也同样传递给该函数。(必要时,这个指针可以用来访问应用相关的状态。)

缺省的注意信息接收器只是简单的抽取信息(使用PQresultErrorMessage)然后传递给注意信息处理器。

注意信息处理器负责处理一个以文本形式给出的注意或者警告信息。系统传递给他消息的字串文本(包括结尾的新行符),加上一个和传递给PQsetNoticeProcessor一样的 void (无类型)指针。(必要时,这个指针可以用来访问应用相关的状态。)

缺省的注意信息处理器就是

static voiddefaultNoticeProcessor(void *arg, const char *message){    fprintf(stderr, "%s", message);}

一旦你设置了注意消息接收器或者处理器,那么你就应该准备好在 PGconn 对象或者PGresult 对象开始存在的时候起就有人调用它们。在创建 PGresult 的时候,PGconn 的当前注意信息处理指针被拷贝到 PGresult,以便被类似PQgetvalue 这样的函数使用。

<
PrevHomeNext
控制函数Up环境变量

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文