PostgreSQL侦听/通知具有相同有效负载的每个事务的通知数

PostgreSQL侦听/通知具有相同有效负载的每个事务的通知数,postgresql,Postgresql,PostgreSQL中说: 如果使用相同的有效负载字符串从同一事务多次发送相同的通道名称,则数据库服务器可以决定仅发送一个通知 你知道这个“决定”是怎么做出的吗?这是一个有趣的问题。也许文档不清楚,但根据我的经验,重复的通知只在子事务中发送 为了不只是猜测,让我们打开PostgreSQL源代码。通知功能具有以下功能: 好的,但它不能解释重复的可能性。因此,我们可以继续前进并检查功能。在这个函数的某个地方,我们在一条注释中找到了答案: /* * As we are not checking

PostgreSQL中说:

如果使用相同的有效负载字符串从同一事务多次发送相同的通道名称,则数据库服务器可以决定仅发送一个通知


你知道这个“决定”是怎么做出的吗?

这是一个有趣的问题。也许文档不清楚,但根据我的经验,重复的通知只在子事务中发送

为了不只是猜测,让我们打开PostgreSQL源代码。通知功能具有以下功能:

好的,但它不能解释重复的可能性。因此,我们可以继续前进并检查功能。在这个函数的某个地方,我们在一条注释中找到了答案:

 /* 
 * As we are not checking our parents' lists, we can still get duplicates
 * in combination with subtransactions, like in:
 *
 * begin;
 * notify foo '1';
 * savepoint foo;
 * notify foo '1';
 * commit; 
 */
就这样。在使用子事务时,我们可以有重复的通知。文档可能更清晰,但可能是PostgreSQL的人员故意这样做的。因此,我可以得出结论,在这种情况下,避免重复并不是一个严格的要求

 /* 
 * As we are not checking our parents' lists, we can still get duplicates
 * in combination with subtransactions, like in:
 *
 * begin;
 * notify foo '1';
 * savepoint foo;
 * notify foo '1';
 * commit; 
 */