无法在 Redshift 中将列类型更改为较短的 VARCHAR。获取 "target column size should be greater or equal to current maximum column size"

Can't alter column type to a shorter VARCHAR in Redshift. Getting "target column size should be greater or equal to current maximum column size"

我正在尝试 运行

alter table schema_name.table_name
    ALTER COLUMN column_name TYPE varchar(256) 

在 Amazon Redshift 中,但出现此错误:

SQL 错误 [500310] [0A000]:亚马逊无效操作:无法更改关系“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) 列来解决这个问题,但是还有其他方法吗?

我认为答案是 'No, you cannot reduce a varchar column length'。您需要将数据复制到其他地方(新 table,新列)以减小大小。 Redshift 不知道旧数据是否适合新大小 w/o 试图自己执行这样的复制。

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

CASCADE 在我的案例中有效。

drop table dbname.tablename CASCADE;