【问题标题】:Alter the data type of a column in MonetDB更改 MonetDB 中列的数据类型
【发布时间】:2015-01-04 21:07:16
【问题描述】:

如何更改 MonetDB 中现有表中的列类型?根据documentation,代码应该类似于

ALTER TABLE <tablename> ALTER COLUMN <columnname> SET ...

但是我基本上迷路了,因为我不知道 MonetDB 使用的 SQL 遵循哪个标准,并且出现语法错误。如果这个声明是不可能的,我会很感激一种解决方法,它对于大型(10^9 条记录的顺序)表来说不是太慢。

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

【问题讨论】:

    标签: sql monetdb


    【解决方案1】:

    目前不支持此功能。但是,有一个解决方法:

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

    create table a(b integer);
    insert into a values(42);
    
    1. 创建一个临时列alter table a add column b2 double;
    2. 将临时列中的数据设置为原始数据update a set b2=b;
    3. 删除原列alter table a drop column b;
    4. 使用新类型alter table a add column b double; 重新创建原始列
    5. 将数据从临时列移动到新列update a set b=b2;
    6. 删除临时列alter table a drop column b2;
    7. 利润

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

    【讨论】:

    • 成功了!只需确保在步骤 3 之前删除原始列 b 上的任何约束即可。
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2021-07-26
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多