Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将varchar数据类型转换为text[]数组_Arrays_Postgresql - Fatal编程技术网

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

Arrays 将varchar数据类型转换为text[]数组,arrays,postgresql,Arrays,Postgresql,我有一个表A(colmn1varchar(10),column2varchar2(20)) 但是我需要将数据类型varchar转换为text[]数组 table A(column1 text[],column2 text[]) 请告诉我如何更改此表列要将列转换为其他数据类型,请使用如下命令: ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text[] Using array[ColumnName];; 只有当列中的每个现有条目都可以通过

我有一个表
A(colmn1varchar(10),column2varchar2(20))

但是我需要将
数据类型varchar
转换为
text[]数组

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

请告诉我如何更改此表列要将列转换为其他数据类型,请使用如下命令:

ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text[] Using array[ColumnName];;
只有当列中的每个现有条目都可以通过隐式转换转换为新类型时,此操作才会成功。如果需要更复杂的转换,可以添加USING子句,指定如何从旧值计算新值


PostgreSQL将尝试将列的默认值(如果有)转换为新类型,以及涉及该列的任何约束。但这些转换可能会失败,或者产生令人惊讶的结果。通常最好在更改列的类型之前删除列上的任何约束,然后再添加经过适当修改的约束。

没有隐式强制转换将
varchar
转换为
text[]
,因此您需要指定如何使用:

可选的
USING
子句指定如何从旧列计算新列值;如果省略,默认转换与从旧数据类型转换为新数据类型的赋值转换相同。如果没有从旧类型转换为新类型的隐式或赋值,则必须提供
USING
子句

像这样简单的事情应该可以做到:

alter table A alter column column1 type text[] using array[column1];

另一列也是如此。

您真的想要文本[]?”“文本”可以保存字符串。您不需要文本[]

就像下面一样

此外,PostgreSQL提供了文本类型,它存储任意长度的字符串。虽然类型文本不在SQL标准中,但其他几个SQL数据库管理系统也有它

所以你只需要在下面打字

ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text;

这是可行的,并且它还确保您不会创建包含空元素的数组值

ALTER TABLE myTable ALTER COLUMN myColumn TYPE varchar[] USING CASE WHEN myColumn IS null THEN null ELSE array[myColumn] END;

当执行时,它会给出这样的错误。指定一个使用表达式来执行转换。我更新了我的帖子,但我看到你得到的@mu发布的答案太短了。你可以投票给你的正确答案。@user2793872欢迎使用StackOverflow。收到有效答案后,请将其标记为解决方案。