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