postgresql - tablo kümesi varsayılanına boole sütunu ekle


159

Varsayılan değeri olan bir tabloya sütun eklemek için bu uygun postgresql sözdizimi mi false

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

Teşekkürler!


3
biraz booleansütun mu yoksa gerçek bir sütun mu istiyorsunuz ?
rfusca

Yanıtlar:


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

ayrıca doğrudan BOŞ DEĞİL belirtebilirsiniz

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

GÜNCELLEME : aşağıdaki yalnızca postgresql 11 öncesi sürümler için geçerlidir.

Craig'in doldurulmuş masalarda bahsettiği gibi, onu adımlara ayırmak daha etkilidir:

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
Tablonuz büyükse, bunun uzun zaman alabileceğini ve tablonun tüm zaman boyunca kilitlenebileceğini unutmayın. Bunu adımlara ayırmak daha hızlıdır: sütunu varsayılan olarak ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, ardından UPDATE users SET priv_user = 'f';ve gerekirse sonlandırın ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer

Adımlara bölünen yaklaşım varsayılan bir değer eklemez. Ayrı bir adımda "VARSAYILAN" f "eklemek hala daha mı hızlı?
Charlie Brown

1
Evet, ayrı bir adımda varsayılanı eklemek yalnızca bir meta veri işlemidir ve bu nedenle çok hızlıdır.
Eelke

ne - 'meta veri işlemi'? Hangi anlamda ve neden bir seferde değeri ayarlamaktan farklı? Teşekkürler
Andrey M. Stepanov

1
Gerçek kurallar, anahtar kelimelerin ve alıntılanmamış tanımlayıcıların büyük / küçük harfe duyarlı olmamasıdır, bu nedenle BOOLEAN'ın dahili olarak postgresql'nin boole kullanacağını düşünmesine izin verilir. Standart tipler ve SQL anahtar kelimeleri büyük harfle yazma eğilimindeyim, tüm tanımlayıcılarım için küçük harf kullanıyorum.
Eelke

17

Gerçek bir boole sütunu istiyorsanız:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

Not: Postgres'in tüm sürümleri bunun tek bir satırda tanımlanmasını desteklemez.
Benjamin R

14

Yalnızca ileride başvurmak üzere, zaten bir boole sütununuz varsa ve yalnızca varsayılan bir ekleme yapmak istiyorsanız:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

Postgresql kullanıyorsanız, boole olarak BOOLEAN sütun türünü küçük harfle kullanmanız gerekir.

ALTER TABLE kullanıcıları "priv_user" boolean DEFAULT false;


4

Psql alter sütun sorgu sözdiziminde böyle

Alter table users add column priv_user boolean default false ;

boolean değeri (true-false) DB (tf) değeri gibi kaydeder .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.