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!


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;

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;

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;

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;


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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.