it-swarm-ja.tech

Postgresは列整数をブール値に変更します

INTEGER NOT NULL DEFAULT 0のフィールドがあるので、これをブール値に変更する必要があります。

これは私が使用しているものです:

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

何か案が?

ありがとう。

44
samsina

これを試して:

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ステートメントが構文的に間違っていました。

85
catchdave

Postgresは整数をブール値に自動的にキャストできます。キーフレーズは

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

上記の回答は正解で、私を助けましたタイプキャストを使用した場合の代わりに1つの変更

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;
11
Rahul Shinde