首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres将jsonb[]更改为jsonb

postgres将jsonb[]更改为jsonb
EN

Stack Overflow用户
提问于 2016-05-13 11:12:17
回答 2查看 4.6K关注 0票数 2

我使用postgres9.4,并且存在“病人”与jsonb[]类型有“接触”栏的关系,如何将jsonb[]类型转换为jsonb

以下是记录在案的。

代码语言:javascript
复制
=>select name, contact from "Patients" where contact is not null;

name  |                                               contact                                               
--------+-----------------------------------------------------------------------------------------------------
"tom" | {"{\"name\": \"tom\", \"phone\": \"111111\", \"address\": \"shanghai\", \"relation\": \"your_relation\"}"}

我尝试了如下方法,contact4是带有jsonb类型的列

代码语言:javascript
复制
alter table "Patients" alter column contact4 type jsonb using contact4::text::jsonb;

ERROR:  invalid input syntax for type json
DETAIL:  Expected ":", but found "}".
CONTEXT:  JSON data, line 1: ...ress\": \"shanghai\", \"relation\": \"your_relation\"}"}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-13 12:10:54

如果只使用jsonb数组的第一个元素,那么问题就很简单:

代码语言:javascript
复制
alter table "Patients" alter column contact type jsonb using contact[1]::jsonb;

否则,可以使用以下函数:

代码语言:javascript
复制
create or replace function jsonb_array_to_jsonb(jsonb[])
returns jsonb language sql as $$
    select jsonb_object_agg(key, value)
    from unnest($1), jsonb_each(unnest)
$$;

alter table "Patients" alter column contact type jsonb using jsonb_array_to_jsonb(contact);
票数 2
EN

Stack Overflow用户

发布于 2017-07-21 07:37:10

从9.5版本开始,为了保存数据并将数据保存在json中作为数组,这将更好地工作。

代码语言:javascript
复制
ALTER TABLE "Patients"  ALTER COLUMN "contact" DROP DEFAULT
ALTER TABLE "Patients"  ALTER COLUMN "contact" TYPE jsonb USING to_json(contact)
ALTER TABLE "Patients"  ALTER COLUMN "contact" SET DEFAULT '[]'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37208568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档