postgresql - tambahkan kolom boolean ke tabel atur default

159

Apakah ini sintaks postgresql yang tepat untuk menambahkan kolom ke tabel dengan nilai default false

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

Terima kasih!

1252748
sumber
3
Anda ingin kolom bit atau booleankolom aktual ?
rfusca

Jawaban:

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

Anda juga dapat langsung menentukan TIDAK NULL

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

UPDATE : mengikuti hanya berlaku untuk versi sebelum postgresql 11.

Seperti yang disebutkan Craig pada tabel yang diisi, lebih efisien untuk membaginya menjadi langkah-langkah:

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;
Eelke
sumber
28
Perhatikan bahwa jika meja Anda besar, ini bisa memakan waktu lama dan mengunci tabel sepanjang waktu. Lebih cepat untuk membaginya menjadi langkah-langkah: tambahkan kolom tanpa dengan default ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, lalu UPDATE users SET priv_user = 'f';dan akhirnya jika Anda perlu ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer
Pendekatan yang dipecah menjadi langkah-langkah tidak menambahkan nilai default. Apakah masih lebih cepat untuk menambahkan "DEFAULT 'f'" pada langkah terpisah?
Charlie Brown
1
Ya menambahkan default dalam langkah terpisah hanya operasi data meta dan karenanya sangat cepat.
Eelke
apa fungsinya - 'operasi meta data'? Dalam arti apa dan mengapa itu berbeda dari menetapkan nilai sekaligus? Terima kasih
Andrey M. Stepanov
1
Aturan sebenarnya adalah bahwa kata kunci dan pengenal yang tidak dikutip tidak peka huruf besar kecil sehingga BOOLEAN diperbolehkan berpikir secara internal postgresql akan menggunakan boolean. Saya cenderung menulis tipe standar dan kata kunci SQL dalam huruf besar, saya menggunakan huruf kecil untuk semua pengidentifikasi saya sendiri.
Eelke
17

Jika Anda menginginkan kolom boolean yang sebenarnya:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
rfusca
sumber
Catatan: tidak semua versi Postgres mendukung definisi ini dalam satu baris.
Benjamin R
14

Hanya untuk referensi di masa mendatang, jika Anda sudah memiliki kolom boolean dan Anda hanya ingin menambahkan default lakukan:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;
LondonRob
sumber
5

Jika Anda menggunakan postgresql maka Anda harus menggunakan tipe kolom BOOLEAN dalam huruf kecil sebagai boolean.

Pengguna ALTER TABLE. Tambah "priv_user" boolean DEFAULT false;

Faisal Chohan
sumber
4

Dalam psql ubah sintaks kueri kolom seperti ini

Alter table users add column priv_user boolean default false ;

nilai boolean (true-false) simpan dalam nilai DB like (tf) .

Temui Patel
sumber