SYNOPSIS

NOTIFY name        

DESCRIPTION 描述

NOTIFY 命令向当前数据库中所有执行过 LISTEN name, 正在监听特定通知条件的前端应用发送一个通知事件。

传递给前端的通知事件包括通知条件名和发出通知的后端进程PID。 数据库设计者有责任定义用于某个数据库的条件名和每个通知条件的含义。

通常,通知条件名与数据库里的表的名字相同, 通知时间实际上意味着"我修改了此数据库,请看一眼有什么新东西"。 NOTIFY 和 LISTEN  命令并不强制这种联系。例如,数据库设计者可以使用几个不同的条件名来标志一个表的几种不同改变。

NOTIFY 为访问同一个 PostgreSQL 数据库的一组进程提供了一种简单的信号形式或进程间通讯机制。
更高级的机制(除了一个简单的通知名以外)可以通过使用数据库中的表从通知者传递数据到被通知者。

当NOTIFY用于通知某一特定表修改的动作的发生, 一个实用的编程技巧是将 NOTIFY 放在一个由表更新触发的规则里。用这种方法, 通知将在表更新的时候自动触发,而且应用程序员不会碰巧忘记处理它。

NOTIFY 和 SQL 事务用某种重要的方法进行交换。首先,如果 NOTIFY 在事务内部执行,通知事件直到事务提交才会送出。
这么做是有道理的,因为如果事务退出了, 那么在它里面的所有命令都没有效果 - 包括 NOTIFY。但如果有人希望通知事件立即发送,这就不太好了。
其次,当一个正在监听的会话在一次事务内收到一个通知信号, 直到本次事务完成(提交或退出)之前,该通知事件将不被送到与之相连的客户端。
同样,如果一个通知在事务内部发送出去了, 而该事务稍后又退出了,我们就希望通知可以在某种程度上被撤消- -但通知一旦发送出去,服务器便不能从客户端"收回"通知。
所以通知时间只是在事务之间传递。这一点就要求使用 NOTIFY 作为实时信号的应用应该确保他们的事务尽可能短。

NOTIFY 在一方面的行为象 Unix 的信号: 如果同一条件名在短时间内发出了多条信号,接收者几次执行 NOTIFY
可能只回收到一条通知信息。 所以依赖于收到的通知条数的方法是很不可靠的。因而,使用 NOTIFY唤醒需要关注某事的应用,
同时还要使用数据库对象(如序列号)来跟踪事件发生了几次。

客户端经常会自己发送与正在监听的通知名一样的 NOTIFY。 这时它(客户端)也和其他正在监听的会话一样收到一个通知事件。 这样可能导致一些无用的工作(与应用逻辑有关)-- 例如, 对客户端刚写过的表又进行一次读操作以发现是否有更新。 我们可以通过检查服务器进程的PID(在通知事件中提供) 是否与自己的后端的PID一致(从 libpq 中取得)。当他们一样时, 说明这是其自身回弹的信息,可以忽略。(不管前面章节是如何讲的,这是一个安全的技巧。 PostgreSQL 保持自身的通知和其他到来的通知区分开。 所以你屏蔽了自己的通知后不会略过外部的通知。)

PARAMETERS 参数

name
 生成信号(通知)的通知条件(任何标识符)。

EXAMPLES 例子

在 psql 里配置和执行一个监听/通知对:

LISTEN virtual;
NOTIFY virtual;
Asynchronous notification "virtual" received from server process with PID 8448.

NOTIFY - 生成一个通知的更多相关文章

  1. android wear开发:为可穿戴设备创建一个通知 - Creating a Notification for Wearables

    注:本文内容来自:https://developer.android.com/training/wearables/notifications/creating.html 翻译水平有限,如有疏漏,欢迎 ...

  2. Android Wear创建一个通知

    创建Android Wear的通知实际上和手机上创建没啥区别,主要是多了几个新类,只要用熟悉了一切都好办了.(如果只是测试通知,则直接运行wear app就能够看到效果) 创建一个简单的wear通知分 ...

  3. java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)

    wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其他线程调用了notify方法(notify并不释放锁,只是告诉调用过wait方法 ...

  4. 监听套接字描述字 已连接套接字描述字 和打电话的情形非常不一样的地方 完成了 TCP 三次握手,操作系统内核就为这个客户生成一个已连接套接字

    1. accept: 电话铃响起了-- 当客户端的连接请求到达时,服务器端应答成功,连接建立,这个时候操作系统内核需要把这个事件通知到应用程序,并让应用程序感知到这个连接.这个过程,就好比电信运营商完 ...

  5. 用php生成一个excel文件(原理)

    1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...

  6. js生成一个不重复的ID的函数的进化之路

    在MongoDB中的ObjectID,可以理解为是一个不会重复的ID,这里有个链接http://blog.csdn.net/xiamizy/article/details/41521025感兴趣可以去 ...

  7. 动态生成一个设定好特殊样式的Tlabel,快速生成代码

    动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...

  8. 【代码笔记】iOS-通过颜色来生成一个纯色图片

    一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...

  9. C# 如何生成一个时间戳

    在程序中,常常会用到时间戳,如何生成一个时间戳呢? /// <summary> /// 获取时间戳 /// </summary> /// <returns>< ...

随机推荐

  1. es之零停机重新索引数据

    实际生产,对于文档的操作,偶尔会遇到这种问题: 某一个字段的类型不符合后期的业务了,但是当前的索引已经创建了,我们知道es在字段的mapping建立后就不可再次修改mapping的值 比如: 1): ...

  2. lianjie3

    http://7xj7xs.com1.z0.glb.clouddn.com/xiao-chengxu.mp4

  3. js 扫码枪的输入

    关于js 获取扫码枪的输入获取方式,之前在网上搜了好多,都是大同小异的,都是说扫码枪输入的时间间隔不会超过30毫秒.但事实上我拿了几台电脑测试的结果是,有的时间间隔甚至超过了100毫秒,所以用时间间隔 ...

  4. Spring4配置文件模板

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. htonl(),htons(),ntohl(),ntons()--大小端模式转换函数

    不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian). 大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处. 小端模 ...

  6. 服务器端-W3Chool:服务器脚本教程

    ylbtech-服务器端-W3Chool:服务器脚本教程 1.返回顶部 1. 服务器脚本教程 从左侧的菜单选择你需要的教程! SQL SQL 是用于访问和处理数据库的标准的计算机语言. 在本教程中,您 ...

  7. VSCode - 使用 WSL(Windows Subsystem for Linux)

    一开始我是只将 VSCode 集成的终端改成 WSL 的 Bash,结果发现内置的 GIt 用的还是 Windows 的 Git,Git Hooks 用的 Windows 的环境,上网搜了一下发现有很 ...

  8. 【疑难杂症】Firefox 火狐浏览器 关闭到 http://detectportal.firefox.com 的流量

    日期:2019-07-18 00:02:58 作者:Bay0net 介绍: 0x01. 问题描述 火狐浏览器的时候,抓包会出现很多这样的数据包.  具体的 URL http://detectport ...

  9. JMV监控工具之JConsole

    一.简介 JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具.下面以对tomcat的监控为例,带领大家熟悉JConsole这个工具. 二.配置 ...

  10. DOM练习(邓邓版)

    先来图片: 今天直接粘代码: 下面是html: <h4>01.图片切换</h4> <img width = "100" src = "../ ...