首页 > 解决方案 > 无法在 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) 列来解决它,但是还有其他方法吗?

标签: sqlamazon-redshiftvarchar

解决方案


我相信答案是“不,你不能减少 varchar 列的长度”。您需要将数据复制到其他地方(新表、新列)以减小大小。Redshift 不知道旧数据是否可以适应新大小而无需尝试自己执行此类复制。

您可以创建所需大小的新列,更新表以将旧列中的数据放入此新列(必要时减少字符串大小),将旧列重命名为唯一的名称,将新列重命名为旧的列名,然后删除唯一的命名列。您将拥有与以前相同的列名,但相关列的最大长度将减少。但是,默认的列顺序会有所不同。


推荐阅读