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