39.6. 规则和命令状态 #
PostgreSQL 服务器会为收到的每条命令返回一个命令状态字符串,例如 INSERT 149592 1。在没有规则参与时,这很简单;但当查询被规则重写时会发生什么呢?
规则对命令状态的影响如下:
如果该查询没有无条件的
INSTEAD规则,那么原始给出的查询就会照常执行,并返回它自身的命令状态。(但请注意,如果存在任何带条件的INSTEAD规则,那么这些规则条件的取反会被加到原始查询上。这可能会减少它处理的行数,从而影响报告的状态。)如果该查询存在任意无条件的
INSTEAD规则,那么原始查询将完全不会执行。在这种情况下,服务器会在由INSTEAD规则(带条件或不带条件)插入、且与原始查询具有相同命令类型(INSERT、UPDATE或DELETE)的查询中,返回最后一条查询的命令状态。如果没有任何规则添加出满足这些条件的查询,那么返回的命令状态会显示原始查询类型,并且把行计数和 OID 字段都置零。
在第二种情况下,程序员可以通过为所需的 INSTEAD 规则指定一个在活动规则中按字母顺序排在最后的规则名,来确保由它设置命令状态,因为它会最后被应用。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.