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!


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;

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;

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;

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;


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) .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.