Postgresql 将列类型从 jsonb 转换为数组类型枚举
Postgresql transform column type from jsonb to array type enum
我有列“scopes”,它是 jsonb 类型并包含字符串数组 [“admin”,“agent”]。
我想将它转换为枚举数组类型。
我正在使用 postresql。
这是我的迁移。
CREATE TYPE enum_scopes AS ENUM ( 'owner', 'admin', 'agent', 'user' );
ALTER TABLE public.users ALTER COLUMN scopes TYPE enum_scopes[] USING scopes::text::enum_scopes[];
在我 运行 迁移后我得到这个:MigrationError:格式错误的数组文字:“[”admin“]”
您可以先像这样创建一个辅助函数
create or replace function jsonb_array_to_array(j jsonb) returns text[] as
$$
select case
when j is null then '{}'
else (select array_agg(txt) from jsonb_array_elements_text(j) txt)
end;
$$ language sql;
然后
ALTER TABLE public.users ALTER COLUMN scopes
TYPE enum_scopes[] USING jsonb_array_to_array(scopes)::enum_scopes[];
辅助函数非常有用且通用,可以在其他情况下重复使用。
我有列“scopes”,它是 jsonb 类型并包含字符串数组 [“admin”,“agent”]。 我想将它转换为枚举数组类型。 我正在使用 postresql。
这是我的迁移。
CREATE TYPE enum_scopes AS ENUM ( 'owner', 'admin', 'agent', 'user' );
ALTER TABLE public.users ALTER COLUMN scopes TYPE enum_scopes[] USING scopes::text::enum_scopes[];
在我 运行 迁移后我得到这个:MigrationError:格式错误的数组文字:“[”admin“]”
您可以先像这样创建一个辅助函数
create or replace function jsonb_array_to_array(j jsonb) returns text[] as
$$
select case
when j is null then '{}'
else (select array_agg(txt) from jsonb_array_elements_text(j) txt)
end;
$$ language sql;
然后
ALTER TABLE public.users ALTER COLUMN scopes
TYPE enum_scopes[] USING jsonb_array_to_array(scopes)::enum_scopes[];
辅助函数非常有用且通用,可以在其他情况下重复使用。