开发者社区> 嗯哼9925> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PostgreSQL的notify 与listen (七)

简介:
+关注继续查看
接PostgreSQL的notify 与listen (六)的内容,探讨一下谁真正接受notify 消息。

修改PostgreSQL的源代码:src/backend/command/async.c:
NotifyMyFrontEnd(const char *channel, const char *payload, int32 srcPid)函数

复制代码
if (whereToSendOutput == DestRemote)
{
    StringInfoData buf;
    pq_beginmessage(&buf, 'A');
    pq_sendint(&buf, srcPid, sizeof(int32));
    pq_sendstring(&buf, channel);
    if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3)
        pq_sendstring(&buf, payload);
    pq_endmessage(&buf);                
                            
    //added by gaojian begin
    elog(WARNING, "NotifyMyFrontEnd, srcPid is: %d", srcPid);  
    elog(WARNING, "NotifyMyFrontEnd, my Pid is: %d", getpid());
    //added by gaojian end 
    ......
}
复制代码
启动 postgres, 执行 ps -ef|grep postgres

开session A(用作listen 端), psql:

postgres#listen gaojian;
postgres#
再来看 ps -ef|grep postgre: 进程号27764/父进程号27695的 名为postgres的进程已启动。

开session B(用作notify 端),psql:
postgres#notify gaojian;
postgres#
再来看 ps -ef|grep postgre: 进程号27857/父进程号27695 的 名为postgres的进程已启动。

再回到session A, 随便执行一条命令:

复制代码
postgres#select current_date;
警告 In NotifyMyFrontEnd srcPid is 27857
警告 In NotifyMyFrontEnd my Pid is 27764
-----date-----
2012-07-13
收到来自伺服器 "gaojian" 进程PID 27875 非同步通知
postgres#
复制代码
这表明 信息的发送者实际上是 和notify 端对应的 后台postgres进程。信息的接受者首先也是和listen端对应的后台postgres进程,由此进程把消息推送给 前台psql(listen端)。






本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/07/13/2590430.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
支付宝旗下知识管理工具语雀免费开放,助力企业在家办公
为帮助社会各企业和组织高效协同运转,支付宝旗下知识管理工具「语雀」为所有企业和组织提供在线办公支持。
677 0
阿里员工都在用的知识管理工具,究竟有何特别?
语雀“空间”​,灵活的企业团队和知识体系管理。
1589 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.9. 运行时统计数据
19.9. 运行时统计数据 19.9.1. 查询和索引统计收集器 19.9.2. 统计监控 19.9.1. 查询和索引统计收集器 这些参数控制服务器范围的统计数据收集特性。当统计收集被启用时,被产生的数据可以通过pg_stat和pg_statio系统视图族访问。
1092 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 29 章 监控磁盘使用_29.2. 磁盘满失败
29.2. 磁盘满失败 一个数据库管理员最重要的磁盘监控任务就是确保磁盘不会写满。一个写满了的数据磁盘可能不会导致数据的崩溃,但它肯定会让系统变得不可用。如果保存 WAL 文件的磁盘变满,会发生数据库服务器致命错误并且可能发生关闭。
1192 0
从电波表到数据库小程序之 - 数据库异步广播(notify/listen)
标签 PostgreSQL , notify , listen , 异步消息 背景 小时候就梦想有个酷酷的电波表(虽然现在还没有拥有),不过电波表和PostgreSQL有什么关系呢?听我道来。
2501 0
PgSQL · 功能分析 · Listen/Notify 功能
Listen 和 Notify 是PG很有意思的一个功能,可以用来进行多应用间的通信。它们可以在SQL中使用,也可以用C、JDBC里面的API调用。下面介绍一下其使用方法和内核实现。 使用方法 用一个简单的例子,来看一下Listen/Notify如何使用。假设我们有两个应用A和B,部署在不同的机
2361 0
Anti-XSS Library v3.1 Released
The Microsoft Information Security Tools (IST) team has released the latest Microsoft Anti-Cross Site Scripting (Anti-XSS) Library version 3.
680 0
+关注
4715
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载