2009-11-16 95 views
35

我有一個INTEGER NOT NULL DEFAULT 0的字段,我需要將其更改爲BOOL。Postgres改變列整數布爾

這是我在用的:

ALTER TABLE mytabe 
ALTER mycolumn TYPE bool 
USING 
    CASE 
     WHEN 0 THEN FALSE 
     ELSE TRUE 
    END; 

但我得到:

ERROR: argument of CASE/WHEN must be type boolean, not type integer 

********** Error ********** 

ERROR: argument of CASE/WHEN must be type boolean, not type integer 
SQL state: 42804 

任何想法?

謝謝。

回答

67

試試這個:

ALTER TABLE mytabe ALTER COLUMN mycolumn DROP DEFAULT; 
ALTER TABLE mytabe ALTER mycolumn TYPE bool USING CASE WHEN mycolumn=0 THEN FALSE ELSE TRUE END; 
ALTER TABLE mytabe ALTER COLUMN mycolumn SET DEFAULT FALSE; 

您需要先刪除約束(因爲它不是一個布爾值),其次你CASE聲明是語法錯誤。

7

上面的回答是正確的,幫助我只是一個修改的情況下,而不是我用的類型轉換

ALTER TABLE mytabe ALTER COLUMN mycolumn DROP DEFAULT; 
ALTER TABLE mytabe ALTER mycolumn TYPE bool USING mycolumn::boolean; 
ALTER TABLE mytabe ALTER COLUMN mycolumn SET DEFAULT FALSE; 
+0

接受的答案是更好,因爲它確實*不*依賴型鑄造。例如,此方法失敗,'不能將類型smallint轉換爲布爾值'。 – 2017-09-18 14:55:15