Skip to content

41.6. 规则和命令状态#

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

规则对命令状态的影响如下

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

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

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