postgresql-テーブルセットのデフォルトにブール列を追加


158

これは、デフォルト値のテーブルに列を追加するための適切なpostgresql構文ですか? false

ALTER TABLE users
ADD "priv_user" BIT
ALTER priv_user SET DEFAULT '0'

ありがとう!


3
ビット列または実際のboolean列が必要ですか?
rfusca

回答:


285
ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN DEFAULT FALSE;

NOT NULLを直接指定することもできます

ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN NOT NULL DEFAULT FALSE;

更新:以下は、postgresql 11より前のバージョンにのみ当てはまります。

クレイグが埋められたテーブルについて述べたように、それをステップに分割する方がより効率的です:

ALTER TABLE users ADD COLUMN priv_user BOOLEAN;
UPDATE users SET priv_user = 'f';
ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
ALTER TABLE users ALTER COLUMN priv_user SET DEFAULT FALSE;

28
テーブルが大きい場合、これには長い時間がかかり、その間ずっとテーブルをロックする可能性があることに注意してください。なお、ステップに分割するために高速です:で、デフォルトなしに列を追加しALTER TABLE users ADD COLUMN priv_user BOOLEAN;、その後、UPDATE users SET priv_user = 'f';必要であれば、最終的にALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
クレイグリンガー

ステップに分割されるアプローチは、デフォルト値を追加していません。別のステップで「DEFAULT 'f'」を追加する方が高速ですか?
チャーリーブラウン

1
はい、別個のステップでデフォルトを追加することはメタデータ操作にすぎないため、非常に高速です。
Eelke 2016年

それは何ですか-「メタデータ操作」?どのような意味で、なぜ一度に値を設定するのとは違うのですか?ありがとう
アンドレイ・M・ステパノフ2018年

1
実際のルールでは、キーワードと引用符で囲まれていない識別子では大文字と小文字が区別されないため、内部ではpostgresqlがブール値を使用すると考えられているBOOLEANが許可されています。標準タイプとSQLキーワードを大文字で書く傾向がありますが、自分のすべての識別子には小文字を使用します。
Eelke

17

実際のブール列が必要な場合:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

注:Postgresのすべてのバージョンがこれを1行で定義することをサポートしているわけではありません。
ベンジャミンR

14

将来の参照のために、すでにブール列があり、デフォルトを追加したいだけの場合:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

postgresqlを使用している場合は、ブール型の列タイプBOOLEANを小文字で使用する必要があります。

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;


4

psqlでは、このような列クエリ構文を変更します

Alter table users add column priv_user boolean default false ;

ブール値(true-false)(tf)値のようにDBに保存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.