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
Любая идея?
Спасибо.
Ответы
Ответ 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;