更改 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);
- 创建临时列
alter table a add column b2 double;
- 将临时列中的数据设置为原始数据
update a set b2=b;
- 删除原来的列
alter table a drop column b;
- 使用新类型重新创建原始列
alter table a add column b double;
- 将数据从临时列移动到新列
update a set b=b2;
- 删除临时列
alter table a drop column b2;
- 利润
请注意,如果有多个列,这将更改列的顺序。然而,这只是一个表面问题。
如何更改 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);
- 创建临时列
alter table a add column b2 double;
- 将临时列中的数据设置为原始数据
update a set b2=b;
- 删除原来的列
alter table a drop column b;
- 使用新类型重新创建原始列
alter table a add column b double;
- 将数据从临时列移动到新列
update a set b=b2;
- 删除临时列
alter table a drop column b2;
- 利润
请注意,如果有多个列,这将更改列的顺序。然而,这只是一个表面问题。