2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不受支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

39.6. 规则和命令状态 #

对于接收到的每个命令,PostgreSQL 服务器都会返回一个命令状态字符串,例如 INSERT 149592 1。当没有规则涉及时,这很简单,但当查询被规则重写时会发生什么?

规则会以如下方式影响命令状态:

  • 如果没有对查询的无条件 INSTEAD 规则,那么原始查询将被执行,并照常返回其命令状态。(但请注意,如果有任何有条件的 INSTEAD 规则,它们的限定条件的否定将被添加到原始查询中。这可能会减少它处理的行数,如果发生这种情况,报告的状态将受到影响。)

  • 如果对查询有任何无条件的 INSTEAD 规则,那么原始查询根本不会被执行。在这种情况下,服务器将返回由 INSTEAD 规则(有条件或无条件)插入的最后一个查询的命令状态,并且该查询的命令类型(INSERTUPDATEDELETE)与原始查询相同。如果没有添加满足这些要求的查询,则返回的命令状态显示原始查询类型以及行数和 OID 字段的零值。

程序员可以通过给 INSTEAD 规则起一个在活动规则中按字母顺序排在最后的规则名,来确保在第二种情况下,任何期望的 INSTEAD 规则都是设置命令状态的那个,因为它最后被应用。

提交更正

如果您在文档中发现任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步澄清的内容,请使用 此表单 报告文档问题。