【发布时间】:2019-09-04 23:04:53
【问题描述】:
我有一个 postgresql 表,其中有一列包含该行的 jsonb 数据。并非所有数据都是从 jsonb 中提取来创建表的,但我们想存储它以防我们需要提取更多数据。
我们现在想从行中的 jsonb 中再提取一个字段并创建一个新列来存储该值。我看到的示例似乎没有具体解决这个问题,因此我想仔细检查我的过程,看看在 PostgreSQL 中是否有更简单的方法。
我的插入语句如下所示:
insert into companyTable (company_id)
select company_object ->>'CompanyId'
from companyTable
这应该从 jsonb company_obejct 中提取值,并插入到表中每一行的列 company_id 中。这看起来正确吗?是他们完成这项任务的更简单方法吗?
更新:
鉴于@Łukasz Kamiński 声明,我似乎不想插入UPDATE,因为INSERT 添加了新行,我只想更新已添加新列的行。我相信这是我应该使用的代码。
update companyTable
set (company_id) =
(select company_object ->>'CompanyId'
from company.company)
另外,因为我不完全理解 UPDATE 的上下文,是否应该将它放在一个循环中,以便使用该行 jsonb 对象更新每一行?
例如(更新前):
id | col1 | company_object | company_id
---|------|--------------------------|------------
1 | a |{'b':1, 'company_id': 3} | NULL
2 | a |{'b':2, 'company_id': 4} | NULL
3 | a |{'b':3, 'company_id': 5} | NULL
(更新后)
id | col1 | company_object | company_id
---|------|--------------------------|------------
1 | a |{'b':1, 'company_id': 3} | 3
2 | a |{'b':2, 'company_id': 4} | 4
3 | a |{'b':3, 'company_id': 5} | 5
【问题讨论】:
-
向我们展示您的完整 json 并告诉我们您希望在插入后在目标表中看到什么。
-
这听起来像你想做更新。还是您真的想要
companyTable中的新 行? -
@ŁukaszKamiński 我不想要一个新行 我想为现有行的新列
company_id添加一个值。
标签: json postgresql sql-update