2015-01-04 41 views
1

如何更改MonetDB中現有表中列的類型?按照documentation代碼應該像修改MonetDB中列的數據類型

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

但後來我基本上失去了,因爲我不知道通過MonetDB使用的SQL如下這裏哪種標準,我得到一個語法錯誤。如果這個聲明是不可能的,我將不勝感激對於大的(10^9記錄的順序)表格不太慢的解決方法。

注:我遇到了這個問題,同時做一些批量數據從csv文件導入到我的數據庫中的表。其中一列是INT類型的,但文件中某些點的值超過了2^31-1的INT限制(是的,表格很大),因此事務中止。在找到導致此故障的原因後,我想將其更改爲BIGINT,但我試過的所有版本的SQL代碼都失敗了。

回答

3

目前不支持。但是,有一個解決方法:

此示例的示例表,例如我們想要將b列的類型從integer更改爲double

create table a(b integer); 
insert into a values(42); 
  1. 創建一個臨時列在臨時列原始數據update a set b2=b;
  2. alter table a add column b2 double;
  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. 利潤

注意,這將改變列的順序,如果有不止一個。但是,這只是一個整容問題。

+1

工作正常!只要確保在步驟3之前刪除了原始列_b_上的任何約束條件。 – buenaonda