postgresql - thêm cột boolean vào bảng đặt mặc định


158

Đây có phải là cú pháp postgresql thích hợp để thêm một cột vào bảng có giá trị mặc định là false

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

Cảm ơn!


3
Bạn có muốn một cột bit hoặc một booleancột thực tế ?
rfusca

Câu trả lời:


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

bạn cũng có thể trực tiếp chỉ định KHÔNG NULL

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

CẬP NHẬT : sau đây chỉ đúng với các phiên bản trước postgresql 11.

Như Craig đã đề cập trên các bảng đã điền, sẽ hiệu quả hơn khi chia nó thành các bước:

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
Lưu ý rằng nếu bảng của bạn lớn, việc này có thể mất nhiều thời gian và khóa bảng trong toàn bộ thời gian. Nhanh hơn để chia nó thành các bước: thêm cột mà không có mặc định ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, sau đó UPDATE users SET priv_user = 'f';và cuối cùng nếu bạn cần ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer

Cách tiếp cận được chia thành các bước không thêm giá trị mặc định. Vẫn còn nhanh hơn để thêm "DEFAULT 'f'" trong một bước riêng biệt phải không?
Charlie Brown

1
Có, việc thêm mặc định trong một bước riêng biệt chỉ là thao tác dữ liệu meta và do đó rất nhanh.
Eelke

nó làm gì - 'một hoạt động dữ liệu meta'? Theo nghĩa nào và tại sao nó khác với việc đặt giá trị trong một lần? Cảm ơn
Andrey M. Stepanov

1
Các quy tắc thực tế là các từ khóa và số nhận dạng không được trích dẫn không phân biệt chữ hoa chữ thường nên BOOLESE được cho phép nghĩ nội bộ postgresql sẽ sử dụng boolean. Tôi có xu hướng viết các loại tiêu chuẩn và từ khóa SQL bằng chữ hoa, tôi sử dụng chữ thường cho tất cả các định danh của riêng tôi.
Eelke

17

Nếu bạn muốn một cột boolean thực tế:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

Lưu ý: không phải tất cả các phiên bản của Postgres đều hỗ trợ điều này được xác định trong một dòng.
Benjamin R

14

Chỉ để tham khảo trong tương lai, nếu bạn đã có một cột boolean và bạn chỉ muốn thêm một mặc định làm:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

Nếu bạn đang sử dụng postgresql thì bạn phải sử dụng kiểu cột BOOLESE trong trường hợp thấp hơn là boolean.

ALTER TABLE người dùng THÊM "private_user" boolean DEFAULT sai;


4

Trong psql thay đổi cú pháp truy vấn cột như thế này

Alter table users add column priv_user boolean default false ;

giá trị boolean (true-false) lưu trong giá trị DB like (tf) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.