【发布时间】:2020-12-11 15:07:42
【问题描述】:
我正在尝试转换存储在 Postgres 的 HSTORE 列(“数据”)中的数据。
我的行值有键“实体”,值在数组中。
"entity"=>"[{'id': .............}]
我使用了以下代码:
Alter TABLE my_table
ALTER COLUMN h_store_column TYPE jsonb
USING hstore_to_jsonb_loose(data -> 'entity');
这导致在新列中作为输出的值如下:
"[{'id': .............}]"
但是,带有引号""。这使它在 JSONB 类型列中成为标量,并且不允许我运行查询。
如何使用 JSONB 更改名为“实体”的新列中每一行的值,不带引号?
[{'id': .............}]
生成类似数据的示例代码:
"key" => "[json_text_array]"
存储在hstore数据类型列中。
当更改为 JSON B 类型时,我得到 {'key':'[array]'},而我在 {'key': [array]} 之后 - 没有引号。我在 postgres 中尝试了松散的函数,没有帮助。
【问题讨论】:
-
请添加一些可重现的样本数据
-
请向我们展示一些可重现/准确的东西。我得到
ERROR: function hstore_to_jsonb_loose(text) does not exist -
嗨,我刚刚在描述中添加了更多内容。 @AkhileshMishra,这是 hstore 中一行的值。 "entity" => "[{'id': '11954_179415600_2441_333_1', 'vehicle': {'trip': {'tripId': '1182456', 'routeId': '2441_333', 'startDate': '20200822', 'startTime':'22:14:00','scheduleRelationship':'SCHEDULED'},'车辆':{'id':'11954_179415600_2441_333_1'},'位置':{'速度':0.0,'轴承': 297.0,'纬度':-33.876972,'经度':151.21237},'时间戳':'1598100524','congestionLevel':'RUNNING_SMOOTHLY','occupancyStatus':'MANY_SEATS_AVAILABLE'}}]"
-
{'id': …}不是有效的 JSON。{"id": …}会。如果你的值看起来像这样,你可以使用(data -> 'entity')::jsonb。 (注意hstore_to_jsonb_loose是绝对没有必要的,因为-> 'entity'已经访问了hstore 中的字符串值)。 -
请不要在 cmets 中添加额外的信息(尤其不是“代码”类型的东西)。 edit 改为您的问题
标签: arrays postgresql jsonb hstore