Sql 在MonetDB中更改列的数据类型

Sql 在MonetDB中更改列的数据类型,sql,monetdb,Sql,Monetdb,如何更改MonetDB中现有表中列的类型?根据标准,代码应该是 ALTER TABLE <tablename> ALTER COLUMN <columnname> SET ... ALTER TABLE ALTER COLUMN SET。。。 但是我基本上迷路了,因为我不知道MonetDB使用的SQL遵循的是哪种标准,所以我得到了一个语法错误。如果此声明不可能实现,我将非常感谢为大型(10^9条记录的顺序)表提供一个不会太慢的解决方案 注意:我在从csv文件向数据库中

如何更改MonetDB中现有表中列的类型?根据标准,代码应该是

ALTER TABLE <tablename> ALTER COLUMN <columnname> SET ...
ALTER TABLE ALTER COLUMN SET。。。
但是我基本上迷路了,因为我不知道MonetDB使用的SQL遵循的是哪种标准,所以我得到了一个语法错误。如果此声明不可能实现,我将非常感谢为大型(10^9条记录的顺序)表提供一个不会太慢的解决方案


注意:我在从csv文件向数据库中的表导入大量数据时遇到了这个问题。其中一列的类型为INT,但文件中的值在某个点超过INT限制2^31-1(是的,表很大),因此事务中止。在我找到失败的原因后,我想将其更改为BIGINT,但我尝试的所有版本的SQL代码都失败了。

这目前不受支持。但是,有一个解决办法:

示例表对于此示例,假设我们希望将列
b
的类型从
integer
更改为
double

create table a(b integer);
insert into a values(42);
  • 创建一个临时列
    ALTERTABLE a add column b2 double
  • 将临时列中的数据设置为原始数据
    更新a集合b2=b
  • 删除原始列
    更改表a删除列b
  • 使用新类型
    alter table a add column b double重新创建原始列
  • 将数据从临时列移动到新列
    更新集合b=b2
  • 删除临时列
    alter table a删除列b2
  • 利润

  • 请注意,如果有多个列,这将更改列的顺序。然而,这只是一个表面问题。

    这是有效的!只需确保在步骤3之前删除原始列b上的任何约束即可。