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