2012-08-13 10 views

Antwort

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

können Sie auch nicht direkt angeben NULL

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

Wie Craig gefüllt Tabellen erwähnt auf es effizienter ist es aufgeteilt in Schritte:

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; 
+17

Beachten Sie, dass es bei einem großen Tisch sehr lange dauern kann, bis die Tabelle für die gesamte Zeit gesperrt ist. Es ist schneller, sie in Schritte aufzuteilen: Fügen Sie die Spalte ohne einen Standardwert mit 'ALTER TABLE-Benutzer HINZUFÜGEN von COLUMN priv_user BOOLEAN;', dann 'UPDATE Benutzer SET priv_user = 'f';' und schließlich, wenn Sie ALTER TABLE Benutzer ALTER COLUMN benötigen priv_user SET NOT NULL; '. –

+0

Der Ansatz, der in Schritte unterteilt ist, fügt keinen Standardwert hinzu. Ist es noch schneller, ein "DEFAULT 'f'" in einem separaten Schritt hinzuzufügen? –

+0

Das Hinzufügen des Standards in einem separaten Schritt ist nur eine Metadatenoperation und somit sehr schnell. – Eelke

13

Wenn Sie eine tatsächliche boolean Spalte:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false; 
+0

Hinweis: Nicht alle Versionen von Postgres unterstützen dies in einer Zeile definiert. –

5

I Wenn Sie postgresql verwenden, müssen Sie den Spaltentyp BOOLEAN in Kleinbuchstaben als boolesch verwenden.

ALTER TABLE Benutzer ADD "priv_user" boolean DEFAULT false;

8

nur für die Zukunft, wenn Sie bereits eine boolean Spalte haben, und Sie wollen einfach nur eine Standard hinzufügen tun:

ALTER TABLE users 
    ALTER COLUMN priv_user SET DEFAULT false; 
1

In psql Spalte Abfragesyntax wie diese

Alter table users add column priv_user boolean default false ; 

ändern boolscher Wert (true-false) Speichern in DB wie (tf) Wert.