Postgresql 将列类型从char更改为array
我在PostgreSQL中有一个表,它有一个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强制转换为数组。但是,我怎
字符(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();
请参阅。