【问题标题】:Convert Key Value Pairs in one row to multiple rows in Postgres在 Postgres 中将一行中的键值对转换为多行
【发布时间】:2022-02-17 05:42:50
【问题描述】:

例如我有如下数据:

bucket_name                               tags
 my_bucket         {'RITM': '0864658', 'AppCode': 'FCKK', 'ApplicationName': 'test-645'}
 my_bucket2        {"RITM": "1117054", "AppCode": "GWRI",  "AssetID": "06634",  "CostCenter": "046",  "ProjectCode": "D20CL"}

我需要将这些键值对标签列分成多行。

输出:

bucket_name     Key                 Value 
my_bucket       RITM                0864658
my_bucket       AppCode             FCKK
my_bucket       ApplicationName     test-645
my_bucket2      RITM                1117054
my_bucket2      AppCode             GWRI
my_bucket2      AssetID             06634
my_bucket2      CostCenter          046
my_bucket2      ProjectCode         D20CL

【问题讨论】:

  • tags 列是什么数据类型?
  • 标签是 Varchar 数据类型
  • 如果这是一个正确(有效)的 JSON 值,会容易得多。这种非标准格式将很难解析。
  • 把datatype转成json容易吗??
  • 是的,因为PostgreSQL有很多json函数来解析json内容。参见手册postgresql.org/docs/current/functions-json.html

标签: sql postgresql dictionary key-value


【解决方案1】:

你可以使用json_object_keys:

select b.bucket_name, v key, b.tags::json -> v value
from buckets b cross join json_object_keys(tags::json) v;

See fiddle.

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 2018-04-15
    • 2021-12-03
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多