将varchar数据类型转换为text []数组

时间:2013-10-08 04:31:21

标签: arrays postgresql

我有表A(colmn1 varchar(10),column2 varchar2(20));

但我需要将datatype varchar转换为text[] array

table A(column1 text[],column2 text[])

请告诉我如何更改此表格列

4 个答案:

答案 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)

你真的想要文字[]吗? 'text'可以保存字符串。你不需要文字[]。

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;