Dodaję nową kolumnę „NOT NULL” do mojej bazy danych Postgresql, używając następującego zapytania (odkażonego dla Internetu):
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;
Za każdym razem, gdy uruchamiam to zapytanie, pojawia się następujący komunikat o błędzie:
ERROR: column "mycolumn" contains null values
Jestem zakłopotany. Gdzie się mylę?
UWAGA: Korzystam głównie z pgAdmin III (1.8.4), ale otrzymałem ten sam błąd, kiedy uruchomiłem SQL z poziomu terminala.
sql
postgresql
alter-table
Huuuze
źródło
źródło
man ALTER_TABLE
:)Jak zauważyli inni, musisz albo utworzyć kolumnę zerowalną, albo podać wartość DOMYŚLNĄ. Jeśli to nie jest wystarczająco elastyczne (np. Jeśli potrzebujesz w jakiś sposób obliczać nową wartość dla każdego wiersza indywidualnie), możesz skorzystać z faktu, że w PostgreSQL wszystkie polecenia DDL można wykonać w ramach transakcji:
źródło
Ponieważ wiersze już istnieją w tabeli,
ALTER
instrukcja próbuje wstawićNULL
do nowo utworzonej kolumny dla wszystkich istniejących wierszy. Trzeba dodać kolumnę jako dozwolonąNULL
, a następnie wypełnić kolumnę żądanymi wartościami, a następnie ustawić ją naNOT NULL
później.źródło
Musisz zdefiniować wartość domyślną lub zrobić to, co mówi Sean i dodać ją bez ograniczenia zerowego, dopóki nie wypełnisz jej w istniejących wierszach.
źródło
Określenie wartości domyślnej również działałoby, przy założeniu, że wartość domyślna jest odpowiednia.
źródło
Lub utwórz nową tabelę jako temp z dodatkową kolumną, skopiuj dane do tej nowej tabeli, manipulując nią w razie potrzeby, aby wypełnić nową kolumnę, która nie ma wartości zerowej, a następnie zamień tabelę poprzez dwuetapową zmianę nazwy.
Tak, jest to bardziej skomplikowane, ale może być konieczne zrobienie tego w ten sposób, jeśli nie chcesz dużej aktualizacji na stole na żywo.
źródło
to zapytanie automatycznie zaktualizuje wartości null
źródło
To działało dla mnie: :)
źródło
NOT NULL
Twoje zapytanie nie ma żadnych ograniczeń. Oczywiście, że działa.