Ama*_*asu 2 postgresql syntax row
在 PostgreSQL 11 中,以下表达式
UPDATE test_table SET ("column_a","column_b") = ('value-a','value-b') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)
被接受并执行更新。
但是对于单个列/值,例如
UPDATE test_table SET ("column_a") = ('value-a') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误。ROW
必须提供,例如
UPDATE test_table SET ("column_a") = ROW ('value-a') WHERE "column_a" = 'value-c'
Run Code Online (Sandbox Code Playgroud)
有没有解释为什么选择这种行为?如果ROW
缺少,是否有歧义?
通常情况下,可以在文档中找到答案。
该UPDATE
参考说,特别是:
根据标准,带括号的目标列名称子列表的源值可以是任何产生正确列数的行值表达式。PostgreSQL 只允许源值是行构造函数或子
SELECT
。
而“行构造函数”的定义如下:
行构造函数是使用其成员字段的值构建行值(也称为复合值)的表达式。行构造函数由关键字
ROW
、左括号、零个或多个用于行字段值的表达式(用逗号分隔)以及最后一个右括号组成。[...]ROW
当列表中有多个表达式时,关键字是可选的。
最后一句有点道理,因为括号中的单个表达式本身是不明确的,可能会与简单的括号表达式混淆。
此语法是在10 版中引入的——HT 到 ypercube™。
归档时间: |
|
查看次数: |
136 次 |
最近记录: |