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[];

辅助函数非常有用且通用,可以在其他情况下重复使用。