2009-11-16 14 views
35

INTEGER NOT NULL DEFAULT 0 olan bir alanım var ve bunu boole değiştirmem gerekiyor.Postgres Alter Sütun Tamsayı için Boole

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

Ama alıyorum:

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 

herhangi bir fikir

Bu kullanıyorum nedir?

Teşekkürler.

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; 

Sen (onun değil boolean olarak) ilk kısıtlamasını kaldırmak gerekir ve ikinci olarak da CASE beyanı sözdizimsel yanlıştı:

cevap

7

bana tip döküm güvenmek * türü çevrim

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

öyle çünkü Kabul cevabı daha iyidir * değil kullanılan yerine davanın sadece bir değişiklik yardımcı olduğu doğrudur. Bu yöntem, örneğin, "boolean için type smallint yazamaz" ile başarısız olur. –