postgresql - dodaj kolumnę logiczną do domyślnego zestawu tabeli

159

Czy to poprawna składnia postgresql, aby dodać kolumnę do tabeli z domyślną wartością false

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

Dzięki!

1252748
źródło
3
chcesz trochę kolumny czy rzeczywistą booleankolumnę?
rfusca

Odpowiedzi:

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

możesz również bezpośrednio określić NOT NULL

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

AKTUALIZACJA : poniższe jest prawdziwe tylko dla wersji przed postgresql 11.

Jak wspomniał Craig na wypełnionych tabelach, bardziej efektywne jest podzielenie go na kroki:

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
źródło
28
Pamiętaj, że jeśli Twój stół jest duży, może to zająć dużo czasu i zablokować stół na cały czas. Szybciej jest podzielić to na kroki: dodaj kolumnę bez wartości domyślnej za pomocą ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, a potem UPDATE users SET priv_user = 'f';i na koniec, jeśli zajdzie taka potrzeba ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer,
Podejście podzielone na etapy nie polega na dodaniu wartości domyślnej. Czy nadal można szybciej dodać „DOMYŚLNE 'f'” w osobnym kroku?
Charlie Brown
1
Tak, dodanie wartości domyślnej w osobnym kroku to tylko operacja na metadanych, a zatem bardzo szybka.
Eelke
co to jest - „operacja na metadanych”? W jakim sensie i dlaczego różni się od ustawiania wartości za jednym razem? Dzięki
Andrey M. Stepanov
1
Rzeczywiste zasady są takie, że w słowach kluczowych i identyfikatorach bez cudzysłowów nie jest rozróżniana wielkość liter, więc BOOLEAN jest dozwolony, ponieważ wewnętrznie postgresql użyje wartości logicznej. Zwykle piszę standardowe typy i słowa kluczowe SQL dużymi literami, używam małych liter dla wszystkich moich własnych identyfikatorów.
Eelke
17

Jeśli chcesz mieć rzeczywistą kolumnę logiczną:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
rfusca
źródło
Uwaga: nie wszystkie wersje Postgres obsługują zdefiniowanie tego w jednej linii.
Benjamin R
14

Tylko na przyszłość, jeśli masz już kolumnę logiczną i chcesz po prostu dodać domyślną, wykonaj:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;
LondonRob
źródło
5

Jeśli używasz postgresql, musisz użyć typu BOOLEAN małymi literami jako wartości logicznej.

ALTER TABLE użytkownicy ADD "priv_user" boolean DEFAULT false;

Faisal Chohan
źródło
4

W psql zmieniaj składnię zapytań kolumnowych w ten sposób

Alter table users add column priv_user boolean default false ;

wartość logiczna (prawda-fałsz) zapisz w DB jak wartość (tf) .

Poznaj Patela
źródło