【发布时间】:2014-11-15 11:11:27
【问题描述】:
更新关系表时:
CREATE TABLE foo ( id serial primary key, credit numeric);
UPDATE foo SET bar = bar + $1 WHERE id = $2;
但是 JSON 中的等价物不起作用:
CREATE TABLE foo ( id serial primary key, data json);
UPDATE foo SET data->'bar' = data->'bar' + $1 WHERE id = $2;
我得到的错误是error: syntax error at or near "->" - 这是相当模糊的。
我该怎么做?
我正在使用 postgres 9.3.4
鉴于@GordonLinoff 在下面的评论,我创建了一个功能请求:https://postgresql.uservoice.com/forums/21853-general/suggestions/6466818-create-update-delete-on-json-keys
如果你也喜欢这个功能,你可以投票。
【问题讨论】:
-
我不认为你可以用
update做你想做的事。看到这个问题:stackoverflow.com/questions/18209625/…. -
@GordonLinoff 嗯 - 看起来像 CRUD,postgres 只支持对 JSON 类型属性的读取操作?这似乎是 postgres 对 JSON 支持的一个相当大的差距;有没有计划增加对此的支持,还是我们应该坚持使用 postgres 作为关系数据库(需要创建/更新/删除)?
-
我们是否应该坚持使用 postgres 作为关系数据库? PostgreSQL 是一个关系型数据库。请注意,JSON 旨在作为一种传输格式,而 PostgreSQL 9.3 存储的是 JSON(文本)而不是对象。它只会是一个评估过的对象。我认为 PostgreSQL 在读取属性方面已经走得很远,它是一种关系 DBMS,而不是像 Javascript 或 Python 这样的过程语言。 9.4 扩展了对 JSON 的支持,并且考虑到一些(IMO 被误导)用户希望 JSON 取代规范化和良好设计的 JSON 需求,我认为它可能会走得更远。
标签: sql json postgresql sql-update postgresql-9.3