2009-11-16 2 views
35

나는 INTEGER NOT NULL DEFAULT 0 인 필드를 가지고 있으며 bool로 변경해야합니다.Postgres Alter Column Integer to Boolean

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 

어떤 생각

이것은 내가 사용하고 무엇입니까?

감사합니다.

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를 부울로 변환 할 수 없습니다'와 같이 실패합니다. –