对于收到的每条命令,PostgreSQL 服务器都会返回一个命令状态字符串,例如 INSERT 149592 1
。当不涉及规则时,这很简单,但当查询被规则重写时会发生什么?
规则对命令状态的影响如下
如果查询没有无条件的 INSTEAD
规则,则将执行最初给定的查询,并且其命令状态将照常返回。(但请注意,如果存在任何条件 INSTEAD
规则,则其限定条件的否定将被添加到原始查询中。这可能会减少它处理的行数,如果是这样,则报告的状态将受到影响。)
如果查询有任何无条件的 INSTEAD
规则,则根本不会执行原始查询。在这种情况下,服务器将返回由 INSTEAD
规则(条件或无条件)插入的最后一个查询的命令状态,并且与原始查询的命令类型(INSERT
、UPDATE
或 DELETE
)相同。如果没有规则添加满足这些要求的查询,则返回的命令状态将显示原始查询类型,并且行计数和 OID 字段为零。
通过在活动规则中为其提供按字母顺序排列的最后一个规则名称,以便最后应用它,程序员可以确保任何所需的 INSTEAD
规则在第二种情况下设置命令状态。