我有表A(colmn1 varchar(10),column2 varchar2(20));
但我需要将datatype varchar
转换为text[] array
table A(column1 text[],column2 text[])
请告诉我如何更改此表格列
答案 0 :(得分:3)
没有隐式广告会将您的varchar
转换为text[]
,因此您需要指定如何使用USING clause完成转化:
像这样简单的东西可以解决问题:可选的
USING
子句指定如何从旧的计算新列值;如果省略,则默认转换与从旧数据类型转换为new的赋值相同。如果没有从旧类型到新类型的隐式或赋值转换,则必须提供USING
子句。
alter table A alter column column1 type text[] using array[column1];
与其他专栏类似。
答案 1 :(得分:1)
要将列转换为其他数据类型,请使用如下命令:
ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text[] Using array[ColumnName];;
只有当列中的每个现有条目都可以通过隐式转换转换为新类型时,才会成功。如果需要更复杂的转换,您可以添加一个USING子句,指定如何从旧值中计算新值。
PostgreSQL将尝试将列的默认值(如果有)转换为新类型,以及涉及该列的任何约束。但是这些转换可能会失败,或者可能产生令人惊讶的结果。通常最好在更改其类型之前删除列上的任何约束,然后再添加适当修改的约束。
答案 2 :(得分:1)
postgresql doc如下所示
此外,PostgreSQL提供了文本类型,它存储任意长度的字符串。虽然类型文本不在SQL标准中,但其他几个SQL数据库管理系统也有它。
所以你只需在下面输入
ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text;
答案 3 :(得分:1)
这很有效,它还可以确保您不会创建具有null元素的数组值。
ALTER TABLE myTable ALTER COLUMN myColumn TYPE varchar[] USING CASE WHEN myColumn IS null THEN null ELSE array[myColumn] END;