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