Ich füge meiner Postgresql-Datenbank eine neue Spalte "NOT NULL" hinzu, indem ich die folgende Abfrage verwende (für das Internet bereinigt):
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;
Jedes Mal, wenn ich diese Abfrage ausführe, erhalte ich die folgende Fehlermeldung:
ERROR: column "mycolumn" contains null values
Ich bin ratlos. Wo gehe ich falsch?
HINWEIS: Ich verwende hauptsächlich pgAdmin III (1.8.4), habe jedoch den gleichen Fehler erhalten, als ich SQL über Terminal ausgeführt habe.
sql
postgresql
alter-table
Huuuze
quelle
quelle
man ALTER_TABLE
:)Wie andere beobachtet haben, müssen Sie entweder eine nullfähige Spalte erstellen oder einen DEFAULT-Wert angeben. Wenn dies nicht flexibel genug ist (z. B. wenn der neue Wert für jede Zeile einzeln berechnet werden muss), können Sie die Tatsache verwenden, dass in PostgreSQL alle DDL-Befehle innerhalb einer Transaktion ausgeführt werden können:
quelle
Da die Tabelle bereits Zeilen enthält,
ALTER
versucht die Anweisung,NULL
für alle vorhandenen Zeilen in die neu erstellte Spalte einzufügen . Sie müssten die Spalte als zulässig hinzufügenNULL
, dann die Spalte mit den gewünschten Werten füllen und anschließend festlegenNOT NULL
.quelle
Sie müssen entweder einen Standard definieren oder das tun, was Sean sagt, und ihn ohne die Null-Einschränkung hinzufügen, bis Sie ihn in die vorhandenen Zeilen eingetragen haben.
quelle
Die Angabe eines Standardwerts würde auch funktionieren, vorausgesetzt, ein Standardwert ist angemessen.
quelle
Oder erstellen Sie eine neue Tabelle als temporär mit der zusätzlichen Spalte, kopieren Sie die Daten in diese neue Tabelle, während Sie sie nach Bedarf bearbeiten, um die nicht nullbare neue Spalte zu füllen, und tauschen Sie die Tabelle dann über eine zweistufige Namensänderung aus.
Ja, es ist komplizierter, aber Sie müssen es möglicherweise so machen, wenn Sie kein großes UPDATE auf einem Live-Tisch möchten.
quelle
Diese Abfrage aktualisiert die Nullen automatisch
quelle
Das hat bei mir funktioniert: :)
quelle
NOT NULL
Einschränkung für Ihre Abfrage. Natürlich funktioniert es.