postgresql Postgres与JSONB的冲突

3j86kqsm  于 8个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(72)

我试图使用Postgres作为文档存储,当我试图有效地upsert一个文档时,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'。
我想将标识符列(示例中的a)留在JSON中,而不是将其作为表中的列。
我正在尝试做的事情目前是否得到支持?

ogsagwnx

ogsagwnx1#

阅读PostgreSQL documentation关于这个主题的文章。如果你试图构建一个json解析器,你可能想使用json_populate_record函数来填充表格。另请参阅这个相关问题:

tquggr8v

tquggr8v2#

你有两个问题:
1)您需要添加额外的括号,如下所示:

ON CONFLICT ((data->>'a'))

字符串
2)您需要在最后一个data引用之前加上您的表别名,如下所示:

DO UPDATE SET data = tbl.data || '{ "a": "b" }'::jsonb

相关问题