Postgresql 将列类型从char更改为array

Postgresql 将列类型从char更改为array,postgresql,alter,Postgresql,Alter,我在PostgreSQL中有一个表,它有一个字符(1)列,我想将其更改为text[]列,但我似乎无法使其工作: ALTER TABLE public.mytable ALTER COLUMN abc TYPE TEXT[] COLLATE pg_catalog."default" USING ARRAY[abc]; 给我这个错误: 错误:“abc”列的默认值无法自动转换为键入文本[] 这是可以理解的,因为Postgres不能将NULL:bpchar强制转换为数组。但是,我怎

我在PostgreSQL中有一个表,它有一个
字符(1)
列,我想将其更改为
text[]
列,但我似乎无法使其工作:

ALTER TABLE public.mytable
     ALTER COLUMN abc TYPE TEXT[] COLLATE pg_catalog."default"
     USING ARRAY[abc];
给我这个错误:

错误:“abc”列的默认值无法自动转换为键入文本[]


这是可以理解的,因为Postgres不能将
NULL:bpchar
强制转换为数组。但是,我怎样才能做到这一点呢?显然,
NULL
s可以键入…

您需要删除默认值,更改数据类型并重新添加默认值。
从:

(…)USING表达式未应用于列的默认值(如果有);(……)

这意味着,当没有从旧类型转换为新类型的隐式或赋值转换时,即使提供了USING子句,SET DATA type也可能无法转换默认值。在这种情况下,使用drop default删除默认值,执行ALTER TYPE,然后使用SET default添加合适的新默认值

举个例子:

>当列的默认表达式不会自动转换为
新数据类型:
altertablefoo
更改列foo_timestamp DROP DEFAULT,
使用时区更改列foo_timestamp TYPE timestamp
使用时区为“epoch”+foo_时间戳*间隔为“1秒”的时间戳,
更改列foo_timestamp SET DEFAULT now();
请参阅。