作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 Postgres 用作文档存储,但在尝试有效地更新插入 Postgres 解析器似乎不喜欢 JSONB 运算符的文档时遇到了问题。
我有一张 table :
CREATE TABLE tbl (data jsonb NOT NULL);
CREATE UNIQUE INDEX ON tbl ((data->>'a'));
我尝试插入数据:
INSERT INTO tbl (data) VALUES ('{ "a": "b" }'::jsonb)
ON CONFLICT (data->>a)
DO UPDATE SET data = data || '{ "a": "b" }'::jsonb
我收到此错误消息:
ERROR: syntax error at or near "->>"
我尝试过 data->>a、data->>'a'、data->a,也许还有 data->'a'。所有这些都是
我想在 JSON 中保留标识符列(示例中的 a),而不是将其作为表格中的一列。
我正在尝试做的事情目前是否受支持?
最佳答案
你有两个问题:
1) 您需要添加额外的括号,如下所示:
ON CONFLICT ((data->>'a'))
2) 您需要在最后一个 data
引用前加上您的表别名,如下所示:
DO UPDATE SET data = tbl.data || '{ "a": "b" }'::jsonb
关于postgresql - Postgres INSERT ON CONFLICT 与 JSONB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980549/
我是一名优秀的程序员,十分优秀!