更改 MonetDB 中列的数据类型

Alter the data type of a column in MonetDB

如何更改 MonetDB 中现有 table 中列的类型?根据 documentation 代码应该是这样的

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

但后来我基本上迷路了,因为我不知道 MonetDB 使用的 SQL 遵循哪个标准,我得到一个语法错误。如果此声明不可能,我将不胜感激,因为它对于大型(10^9 条记录的顺序)来说不会太慢 tables.

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

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

示例 table 对于此示例,假设我们要将列 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. 利润

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