【问题标题】:JSON/HSTORE in PostgreSQL ArraysPostgreSQL 数组中的 JSON/HSTORE
【发布时间】:2014-04-04 00:08:52
【问题描述】:

我正在努力将 JSON 对象存储到 Postgresql 数组中。我做了这样的事情 --

CREATE TABLE rock_band
(
   name text,
   members VARCHAR(200) []
);

INSERT INTO rock_band VALUES ('Linkin Park','{"Name":"Chester" , "age" : "38"}');

ERROR:  malformed array literal:

关于我们如何将 json 存储到 Postgresql 数组然后将更多 json 对象附加到同一个数组的任何指导/指针。

如果我们可以在 Postgresql Array 中存储一个 JSON 对象,那么我们可以存储一个 HSTORE 值。

--- 更新 ---

好的,在 heapanalytics 的一个人的帮助下,我能够将值插入为 JSON 对象数组

CREATE TABLE rock_band (
  name TEXT,
  members JSON[]  <<--- This is changed now as compared to last one 
);

INSERT INTO rock_band VALUES ('The Who', '{}');

要追加到我所做的数组:

UPDATE rock_band SET members = array_append(members, '{"name":"Roger Daltry", "age":61}')     WHERE name = 'The Who';

然后我得到这样的东西--

select * from rock_band;
  name   |                                     members
---------+----------------------------------------------------------------------------------
 The Who | {"{\"name\":\"Roger Daltry\", \"age\":61}","{\"name\":\"Chester\", \"age\":38}"}
(1 row)

但现在的问题是我如何查询它,比如 --

 test=# select members from rock_band where 'Chester' = ANY(members->'name');
 ERROR:  operator does not exist: json[] -> unknown
 LINE 1: ...mbers from rock_band where 'Chester' = ANY(members->'name');
                                                         ^
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

有什么建议吗?

【问题讨论】:

  • 您正在尝试将members 的值设置为字符串'{"Name":"Chester" , "age" : "38"}'。就 Postgres 而言,这里没有 JSON,只有一个字符串。 INSERT INTO rock_band VALUES ('foo', 'bar') 会出现同样的错误。请参阅 this documentation 了解如何编写数组字面量。
  • 查询和使用这将毫无乐趣可言。我强烈建议规范化数据。仅仅因为 PostgreSQL 支持数组、json 等,并不意味着您应该将它们作为您的首选。

标签: arrays json postgresql


【解决方案1】:

我看不出有什么问题,这一切都在文档中。
这是一个例子:http://sqlfiddle.com/#!15/864bf/7

例如

SELECT name FROM (SELECT name, members, generate_subscripts (members, 1) AS s FROM rock_band) AS foo
  WHERE members[s]->>'Name' = 'Chester';

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2015-12-28
  • 2016-12-08
相关资源
最近更新 更多