Postgres Alter Column Integer to Boolean - PullRequest
       19

Postgres Alter Column Integer to Boolean

41 голосов
/ 16 ноября 2009

У меня есть поле INTEGER NOT NULL DEFAULT 0, и мне нужно изменить его на bool.

Вот что я использую:

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

Есть идеи?

Спасибо.

Ответы [ 2 ]

78 голосов
/ 16 ноября 2009

Попробуйте это:

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 утверждение было синтаксически неверным.

9 голосов
/ 19 ноября 2015

Postgres может автоматически приводить целые числа к логическим. Ключевая фраза

using some_col_name::boolean
-- here some_col_name is the column you want to do type change

Над ответом правильный ответ, который мне помог. Только одна модификация вместо случая, когда я использовал приведение типа

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...