sql - 无法在 Redshift 中将列类型更改为较短的 VARCHAR。获取“目标列大小应大于或等于当前最大列大小”
问题描述
我正在尝试运行
alter table schema_name.table_name
ALTER COLUMN column_name TYPE varchar(256)
在 Amazon Redshift 中,但我收到此错误:
SQL 错误 [500310] [0A000]:Amazon 无效操作:无法更改关系“table_name”的列“column_name”,目标列大小 256 应大于或等于当前最大列大小 879;
我已经试过了
update schema_name.table_name
set column_name = CAST(column_name AS VARCHAR(256))
和
update schema_name.table_name
set column_name = SUBSTRING(column_name, 1, 256)
为了减少 879 的最大列大小,但我仍然得到同样的错误。我知道我可以通过使用相同数据创建一个新的 VARCHAR(256) 列来解决它,但是还有其他方法吗?
解决方案
我相信答案是“不,你不能减少 varchar 列的长度”。您需要将数据复制到其他地方(新表、新列)以减小大小。Redshift 不知道旧数据是否可以适应新大小而无需尝试自己执行此类复制。
您可以创建所需大小的新列,更新表以将旧列中的数据放入此新列(必要时减少字符串大小),将旧列重命名为唯一的名称,将新列重命名为旧的列名,然后删除唯一的命名列。您将拥有与以前相同的列名,但相关列的最大长度将减少。但是,默认的列顺序会有所不同。
推荐阅读
- spring-batch - 在跳过情况下禁用 Spring Batch 单项处理
- python - Eclipse 的“变量引用不存在的源:${workspace_loc:project/project.py}”错误
- php - 在以下行获取数组到字符串的转换错误:$sub= $foldername.'/'.$check[$x];。请指教
- android - 使用双精度数组创建微调器
- android - 我们如何将位图图像存储到移动内存中?
- button - Flutter改变AppBar内OutlineButton的高度?
- python - 象棋中的主教运动
- java - 如何捕获 arraylist 包含的部分字符串的索引?
- php - Special characters are working everywhere but not in the controller codeigniter
- java - 读取文件时不匹配异常