【问题标题】:Copying one column data to other column in json format以json格式将一列数据复制到另一列
【发布时间】:2021-06-27 05:15:36
【问题描述】:

我正在迁移一个应用程序。它具有 postgres 数据库版本 9.4.19。有一张表可以说 StudentData。早些时候,它有 4 列,即 Id、Name、Class、City。现在我创建了一列,即“信息”,它以 json 格式存储名称、类别和城市,如下所示

{
  "STUDENT_NAME":["Tom","Sam","Mark"],
  "STUDENT_CLASS":[3,6,2],
  "STUDENT_CITY":["Newyork","London","London"]
}

现在我将以这种 json 格式存储任何新的传入数据,但在部署这个新结构之前,我想将现有列(上面提到的)数据迁移到 json 结构中的新列。我需要某种脚本或 sql 函数。我在 sql 脚本方面非常薄弱。
怎么做?请帮帮我。

编辑:感谢大家提供宝贵的 cmets,但我自己解决了这个问题,没有使用任何 json 函数。我通过 writen one cte 手动完成,然后通过手动放置 json 结构来更新列。

【问题讨论】:

  • 那么,您想用一个 JSON 对象替换整个表结构吗?为什么要这样做?这只有缺点:创建、删除、替换操作非常困难,搜索也是如此,索引是不可能的,......如果你需要这种格式的数据,考虑一个视图或其他东西,但保持你的表规范化。
  • @a_horse_with_no_name 对不起,我的错。现在是 9.4.19
  • @S-Man 我已经实现了它。我只需要迁移数据。

标签: sql json postgresql postgresql-9.4


【解决方案1】:

我看到很少有函数可以在 json (json_agg & row_t_json) 中获取输出,并尝试使用它来获得类似的输出。请查看这是否是您要查找的内容:

参考查询:

with student as 
(
select 'Tom' as Name, 3 as Class, 'New York' as City union all
select 'Sam' as Name, 6 as Class, 'London' as City union all
select 'Mark' as Name, 2 as Class, 'London' as City 
)

select 
row_to_json(st_j) out_json
from
(
 select 
  json_agg(st.name) Student_Name, 
  json_agg(st.Class) Student_Class, 
  json_agg(st.City) Student_City
 from 
  student st
) st_j

小提琴网址: https://dbfiddle.uk/?rdbms=postgres_9.5&fiddle=73dd0699461c8c2992e0d49da044fca3

注意:不了解 PostgreSQL,所以可能有更好的方法。

【讨论】:

  • 感谢您的回复。但我需要从列中选择数据而不是对其进行硬编码。例如 - 从名称列、类列和城市列中选择数据,然后从中创建一个 json 结构。
  • with部分供参考。只需使用选择查询。用你的替换学生表和列。
  • 我不能使用json函数,因为列的类型是文本,我不能改变它(由其他人决定)。
  • 我正在做这样的事情。请看下文;
  • WITH migrate_data AS (SELECT name,class,city AS data FROM StudentData) SELECT migrate_data UPDATE StudentData AS st SET st.info=("{'"STUDENT_NAME'":[",migrate_data.name, "]}"));
猜你喜欢
  • 2016-03-15
  • 2016-08-28
  • 2021-11-28
  • 1970-01-01
  • 2019-10-14
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多