Подтвердить что ты не робот

Postgres Alter Column Целое число с булевым

У меня есть поле 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

Любая идея?

Спасибо.

4b9b3361

Ответ 1

Попробуйте следующее:

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 был синтаксически неправильным.

Ответ 2

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;