2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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 规则是在第二种情况下设置命令状态的规则,以便它最后应用。

提交更正

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