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!


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;

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;

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;

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;


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) .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.