PostgreSQL 服务器为接收到的每个命令返回一个命令状态字符串,例如 INSERT 149592 1
。当没有规则涉及时,这很简单,但是当查询被规则重写时会发生什么?
规则对命令状态的影响如下:
如果查询没有无条件的 INSTEAD
规则,那么将执行最初给定的查询,并像往常一样返回其命令状态。(但是请注意,如果存在任何有条件的 INSTEAD
规则,它们的限定条件的否定将添加到原始查询中。这可能会减少它处理的行数,如果是这样,报告的状态将受到影响。)
如果查询存在任何无条件的 INSTEAD
规则,则根本不会执行原始查询。在这种情况下,服务器将返回由 INSTEAD
规则(有条件或无条件)插入的最后一个查询的命令状态,并且该查询与原始查询的命令类型(INSERT
,UPDATE
或 DELETE
)相同。如果没有规则添加满足这些要求的查询,则返回的命令状态将显示原始查询类型,行计数和 OID 字段均为零。
程序员可以通过在活动的规则中给出字母顺序最后的规则名称来确保在第二种情况下,任何想要的 INSTEAD
规则都是设置命令状态的规则,以便最后应用该规则。
如果您发现文档中的任何内容不正确,与您使用特定功能的经验不符或需要进一步澄清,请使用此表格报告文档问题。