40.6. 规则和命令状态

PostgreSQL 服务器针对收到的每个命令返回一个命令状态字符串,例如INSERT 149592 1。当不涉及任何规则时,这很简单,但是当查询被规则重写时会发生什么呢?

规则会影响命令状态,如下所示:

  • 如果查询没有无条件的INSTEAD规则,则将执行最初给定的查询,并且将照常返回其命令状态。 (但是请注意,如果有任何条件INSTEAD规则,则其条件的否定将被添加到原始查询中.这可能会减少其处理的行数,并且如果这样的话,报告的状态也会受到影响.)

  • 如果查询有任何无条件的INSTEAD规则,则将根本不执行原始查询。在这种情况下,服务器将返回由INSTEAD规则(有条件或无条件)插入的最后一个查询的命令状态,并且该查询的命令类型(INSERTUPDATEDELETE)与原始查询相同。如果没有任何规则添加满足这些要求的查询,则返回的命令状态将显示原始查询类型,并且行数和 OID 字段为零。

通过在活动规则中按字母 Sequences 排列最后一个规则名称,程序员可以确保任何所需的INSTEAD规则都是在第二种情况下设置命令状态的规则,以便最后应用。