postgresql - aggiungi la colonna booleana al set di tabelle predefinito


159

È questa sintassi postgresql corretta per aggiungere una colonna a una tabella con un valore predefinito di false

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

Grazie!


3
vuoi una colonna di bit o una booleancolonna effettiva ?
rfusca,

Risposte:


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

puoi anche specificare direttamente NOT NULL

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

AGGIORNAMENTO : il seguito è vero solo per le versioni precedenti a postgresql 11.

Come Craig ha menzionato su tavoli pieni, è più efficiente dividerlo in passaggi:

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
Nota che se il tuo tavolo è grande, questo può richiedere molto tempo e bloccare il tavolo per tutto il tempo. È più veloce dividerlo in passaggi: aggiungi la colonna senza un valore predefinito con ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, quindi UPDATE users SET priv_user = 'f';e infine se necessario ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer,

L'approccio suddiviso in passaggi non aggiunge un valore predefinito. È ancora più veloce aggiungere una "DEFAULT 'f'" in un passaggio separato?
Charlie Brown,

1
Sì, l'aggiunta del valore predefinito in una fase separata è solo un'operazione di metadati e quindi molto veloce.
Eelke,

che cosa significa "un'operazione di metadati"? In che senso e perché è diverso dall'impostazione del valore in una volta sola? Grazie
Andrey M. Stepanov il

1
Le regole attuali sono che le parole chiave e gli identificatori non quotati non fanno distinzione tra maiuscole e minuscole, quindi BOOLEAN è ammesso che internamente postgresql userà il valore booleano. Tendo a scrivere tipi standard e parole chiave SQL in maiuscolo, utilizzo maiuscole per tutti i miei identificatori.
Eelke l'

17

Se si desidera una colonna booleana effettiva:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

Nota: non tutte le versioni di Postgres supportano questa definizione in una riga.
Benjamin R,

14

Solo per riferimento futuro, se hai già una colonna booleana e vuoi solo aggiungere un predefinito fai:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

Se stai usando postgresql, devi usare il tipo di colonna BOOLEAN in minuscolo come booleano.

Gli utenti di ALTER TABLE AGGIUNGONO "priv_user" booleano DEFAULT false;


4

In psql alterare la sintassi della query in questo modo

Alter table users add column priv_user boolean default false ;

valore booleano (true-false) salvato nel valore del DB like (tf) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.