PostgreSQL服务器为它收到的每个命令返回一个命令状态字符串,例如INSERT 149592 1
。没有涉及规则时这很简单,但是查询被规则重写时会发生什么呢?
规则对命令状态的影响如下:
如果没有查询的无条件INSTEAD
规则,那么原始给出的查询将会被执行,并且它的命令状态将像平常一样被返回(但是请注意如果存在任何有条件INSTEAD
规则,那么它们的反条件将被加到原始查询中。这样可能会减少它处理的行数,并且报告的状态将受影响)。
如果有查询的任何无条件INSTEAD
规则,那么原始查询将完全不被执行。在这种情况下,服务器将返回由服务器将返回由INSTEAD
规则(有条件的或无条件的)插入的最后一条和原始查询命令类型(INSERT
、UPDATE
或DELETE
)相同的查询的命令状态。如果任何规则添加的查询都不符合这些要求,那么返回的命令状态显示原始查询类型并且行计数和
OID 域为零。
通过为任何想要的INSTEAD
规则指定在活动规则中排名最后的规则名,程序员可以确保该规则都是在第二种情况里设置命令状态的规则,因为它会被最后一个应用。
这部份描述在PostgreSQL中SQL语言的使用。我们从描述SQL的一般语法开始,然后解释如何创建保存数据的结构、如何填充数据库以及如...
5.4.1. 检查约束5.4.2. 非空约束5.4.3. 唯一约束5.4.4. 主键5.4.5. 外键5.4.6. 排他约束 数据类型是一种限制能够存储在表中数据...
7.2.1. FROM子句7.2.2. WHERE子句7.2.3. GROUP BY和HAVING子句7.2.4. GROUPING SETS、CUBE和ROLLUP7.2.5. 窗口函数处理 ...