postgresql - Boolesche Spalte zur Standardeinstellung der Tabelle hinzufügen

158

Ist dies die richtige Postgresql-Syntax, um einer Tabelle eine Spalte mit dem Standardwert von hinzuzufügen? false

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

Vielen Dank!

1252748
quelle
3
Möchten Sie eine Bit-Spalte oder eine tatsächliche booleanSpalte?
Rfusca

Antworten:

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

Sie können NOT NULL auch direkt angeben

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

UPDATE : Folgendes gilt nur für Versionen vor postgresql 11.

Wie Craig an gefüllten Tischen erwähnte, ist es effizienter, es in Schritte aufzuteilen:

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
quelle
28
Beachten Sie, dass es bei einem großen Tisch lange dauern kann, bis der Tisch für die gesamte Zeit gesperrt ist. Es ist schneller, es in Schritte aufzuteilen: Fügen Sie die Spalte ohne Standard mit hinzu ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, UPDATE users SET priv_user = 'f';und dann und schließlich, wenn Sie müssen ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer
Der in Schritte unterteilte Ansatz fügt keinen Standardwert hinzu. Ist es noch schneller, ein "DEFAULT 'f'" in einem separaten Schritt hinzuzufügen?
Charlie Brown
1
Ja, das Hinzufügen der Standardeinstellung in einem separaten Schritt ist nur eine Metadatenoperation und daher sehr schnell.
Eelke
Was bedeutet das - eine Metadatenoperation? In welchem ​​Sinne und warum ist es anders als das Einstellen des Werts auf einmal? Vielen Dank
Andrey M. Stepanov
1
Die eigentlichen Regeln sind, dass Schlüsselwörter und nicht zitierte Bezeichner nicht zwischen Groß- und Kleinschreibung unterscheiden, sodass BOOLEAN zulässig ist, da intern postgresql Boolesche Werte verwendet. Ich neige dazu, Standardtypen und SQL-Schlüsselwörter in Großbuchstaben zu schreiben. Ich verwende Kleinbuchstaben für alle meine eigenen Bezeichner.
Eelke
17

Wenn Sie eine tatsächliche boolesche Spalte möchten:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
rfusca
quelle
Hinweis: Nicht alle Versionen von Postgres unterstützen dies in einer Zeile.
Benjamin R
14

Nur zum späteren Nachschlagen, wenn Sie bereits eine boolesche Spalte haben und nur eine Standardspalte hinzufügen möchten:

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

Wenn Sie postgresql verwenden, müssen Sie den Spaltentyp BOOLEAN in Kleinbuchstaben als Booleschen Wert verwenden.

ALTER TABLE Benutzer ADD "priv_user" boolean DEFAULT false;

Faisal Chohan
quelle
4

Ändern Sie in psql die Spaltenabfragesyntax wie folgt

Alter table users add column priv_user boolean default false ;

Boolescher Wert (true-false) wird im DB-ähnlichen (tf) Wert gespeichert .

Treffen Sie Patel
quelle