"[{'id': .............}] 我使用了以-6ren">
gpt4 book ai didi

arrays - 将 HSTORE 数组值转换为 JSONB 中的列

转载 作者:行者123 更新时间:2023-12-04 09:02:21 25 4
gpt4 key购买 nike

我正在尝试转换存储在 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 更改名为“entity”的新列中每一行的值,而不使用引号?
[{'id': .............}]
生成类似数据的示例代码:
"key" => "[json_text_array]"
存储在 hstore数据类型列。
当更改为 JSON B 类型时,我得到 {'key':'[array]'} ,而我在追求 {'key': [array]} - 没有引号。我在 postgres 中尝试了松散的函数,没有帮助。

最佳答案

根据您的问题,我的理解是,您有一列类型为 hstore有一个名为 entity 的 key 和值(value)为 JSON ARRAY .您的问题和解决方案的说明如下:

  • 您的 Alter问题中提到的查询将通过错误,因为 hstore_to_jsonb_loose函数接受 hstore输入值但您正在传递 text .所以正确的查询语句应该是。
  •     Alter TABLE my_table 
    ALTER COLUMN h_store_column TYPE jsonb
    USING hstore_to_jsonb_loose(data) -> 'entity';
  • 以上查询将转换 hstore将键值转换为 jsonb 键值对并将其更新到列 h_store_column .

  • 所以函数 hstore_to_jsonb_loose将数据转换为 { "entity": "[{'id':..........}]" }您正在从中提取 JSON键值 'entity'这是 "[{'id':..........}]" .
  • 您想存储从 hstore_to_jsonb_loose(data) -> 'entity' 获取的值完整 JSON ARRAY .您的数据作为值存储在 hstore type 列似乎是 JSON但它不是 JSON .在 JSON , 键和值(数字和 bool 值除外)被 " 包围但在你的字符串中它被 ' 包围.所以不能存储为JSON JSONB 类型列。
  • 考虑到 JSON 值的结构没有其他问题(除了 ' )。我们应该更换 '"并将该值作为 JSONB 存储在列中。试试这个查询来做同样的事情。
  • Alter TABLE test 
    ALTER COLUMN h_store_column TYPE jsonb
    USING replace(hstore_to_jsonb_loose(data)->>'entity','''','"')::jsonb;
    DEMO1
    hstore_to_jsonb_loose在您的情况下不需要。您可以写下您的 Alter声明如下:
    Alter TABLE test 
    ALTER COLUMN h_store_column TYPE jsonb
    USING replace((data)->'entity','''','"')::jsonb;
    DEMO2

    关于arrays - 将 HSTORE 数组值转换为 JSONB 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63536246/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com