postgresql - เพิ่มคอลัมน์บูลีนเป็นค่าเริ่มต้นของชุดตาราง


159

นี่เป็นไวยากรณ์ 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 เท่านั้น

ดังที่ Craig กล่าวไว้ในตารางที่กรอกข้อมูลแล้วมันจะมีประสิทธิภาพมากกว่าในการแบ่งออกเป็นขั้นตอน:

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;
Craig Ringer

วิธีการที่แบ่งออกเป็นขั้นตอนไม่ได้เป็นการเพิ่มค่าเริ่มต้น มันยังเร็วกว่าหรือถ้าจะเพิ่ม "DEFAULT 'f'" ในขั้นตอนอื่น?
Charlie Brown

1
ใช่การเพิ่มค่าเริ่มต้นในขั้นตอนแยกเป็นเพียงการดำเนินการข้อมูลเมตาและรวดเร็วมาก
Eelke

มันคืออะไร - 'การดำเนินการข้อมูลเมตา'? ในแง่ใดและทำไมมันแตกต่างจากการตั้งค่าในครั้งเดียว? ขอบคุณ
Andrey M. Stepanov

1
กฎที่แท้จริงคือคำหลักและตัวระบุที่ไม่ได้กล่าวถึงจะไม่ตรงตามตัวพิมพ์ใหญ่ - เล็กดังนั้นจึงอนุญาตให้ BOOLEAN คิดว่า postgresql ภายในจะใช้บูลีน ฉันมักจะเขียนประเภทมาตรฐานและคำหลัก SQL เป็นตัวพิมพ์ใหญ่ฉันใช้ตัวพิมพ์เล็กสำหรับตัวระบุของฉันเองทั้งหมด
Eelke

17

หากคุณต้องการคอลัมน์บูลีนจริง:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

หมายเหตุ: Postgres บางรุ่นไม่สนับสนุนการกำหนดนี้ในหนึ่งบรรทัด
Benjamin R

14

สำหรับการอ้างอิงในอนาคตหากคุณมีคอลัมน์บูลีนอยู่แล้วและคุณต้องการเพิ่มค่าเริ่มต้นให้ทำดังนี้

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

หากคุณใช้ postgresql คุณต้องใช้ประเภทคอลัมน์บูลีนเป็นตัวพิมพ์เล็กเป็นบูลีน

ผู้ใช้ ALTER TABLE ทำการเพิ่ม "priv_user" บูลีน DEFAULT false;


4

ใน psql แก้ไขไวยากรณ์เคียวรีคอลัมน์เช่นนี้

Alter table users add column priv_user boolean default false ;

ค่าบูลีน(จริงเท็จ)บันทึกในฐานข้อมูลเช่น(TF)มูลค่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.