SQLSTATE[23502]: Not null violation:

kuddel

Benutzer
Beiträge
15
hallo

ich habe bezogen auf eine weiter DB wieder eine ähnliche fehlermeldung, die spalten in der DB sind alle auf 'Not Null' gesetzt.

SQLSTATE[23502]: Not null violation: 7 FEHLER: NULL-Wert in Spalte „v_name“ verletzt Not-Null-Constraint DETAIL:

Danach habe ich die Spalte geändert undzwar das häkchen bei NOT NULL weggelassen, jetzt passiert
bei der eingabe meines skripts gar nichts. keine meldung, weißes fenster.

Ich wollte das rückgänggig machen, aber dann kommt von phpPgAdmin folgendes:

SQL-Fehler:

FEHLER: Spalte „v_punkte“ enthält NULL-Werte
In der Anweisung:
ALTER TABLE "public"."vorlesungen" ALTER COLUMN "v_punkte" SET NOT NULL

Weiß nicht, was ich da machen soll. Das php skript ist nicht von mir, und hat auch gut funktioniert, bevor ich mit der db rumgespielt habe
 
Werbung:
Nun, ja. Zuerst hast Du versucht, in einer NOT NULL - Spalte einen NULL-Wert einzugeben, danach hast Du die Spalte so geändert, daß NULL-Werte erlaubt sind. Nun sind also NULL-Werte in der Tabelle bzw. in dieser Spalte. Ein Versuch, diese Spalte nun wieder auf NOT NULL zu ändern scheitert, weil ja bereits Records mit NULL in dieser Spalte existieren, daher kann dieser Constraint nun nicht mehr gesetzt werden.

tl;dr

absolut korrektes Verhalten der Datenbank.

Falls Du alle Records, die NULL in der Spalte enthalten, löschen willst:

delete from <table> where <column> IS NULL;
 
Du hast jetzt Daten in der DB, die gemäß Deiner Vorgaben (NOT NULL) nicht valide sind, da sie NULL-Werte enthalten. Ursache dafür ist das zwischenzeitliche Abschalten des entsprechenden Constraints. Wie Du damit umgehst ist jetzt Deine Entscheidung, die kann Dir jetzt keiner abnehmen. Das ist jetzt kein technisches Problem.
 
Du kannst die Daten speichern (z.B. via einem normalen Dump), Du kannst Spalten löschen oder eine oder mehrere zufügen. Alles geht. Was Du brauchst, ist ein Ziel, was Du erreichen willst. Wenn das bekannt ist, findet sich auch ein Weg. Ähnlich wie bei einem Navi. Du solltest wissen, wo Du hin willst. Derzeit scheinst Du aber eher das Navi zu fragen: "entschuldige, weißt Du zufällig, wo ich hin will?". Das geht so nicht.
 
ich verstehe was du meinst, das problem ist nur, das ich in sachen postgresql eine null bin, ich versuche es zu verstehen, bin aber sehr schlecht und langsam. sorry.

das hatte ich zu beginn
upload_2017-1-2_17-10-26.png

dann habe ich beim ausfüllen meiner eingabefelder die oben genannte fehlermeldung erhalten.
daraufhin habe ich es geändert.


upload_2017-1-2_17-8-38.png

jetzt erhalte ich die andere fehlermeldung

was ich möchte ist, dass ich wieder daten in die spalten speichern kann
 
Du kannst doch Daten speichern, nur kannst Du den NOT NULL - Constraint nicht mehr setzen, weil nun NULL-Werte drin sind - das war Deine zweite Fehlermeldung.
 
ich habe jetzt folgendes gemacht, undzwar habe ich die daten aus der Tabelle vorlesung exportiert als csv, aber nur die daten (ohne struktur), dann habe ich die tabelle von vorlesung
in vorlesung_1 geändert. Dann eine neue tabelle erstellt mit namen vorlesung und 5 Spalten (siehe zweites bild).
die daten importiert (csv), zunächst eine importierfehler bzgl. einer zeile erhalten, diese habe ich dann in der csv datei gelöscht, daher nur 77 Datensätze.
dann hat es mit dem import geklappt.

Jetzt wenn ich das Programm aufrufe , funktioniert gar nichts mehr und ich erhalte folg.:

Uncaught Exception:
SQLSTATE[42P01]: Undefined table: 7 FEHLER: Relation „vorlesungen“ existiert nicht LINE 1: SELECT * FROM vorlesungen WHERE TRUE ^


Was habe ich jetzt falsch gemacht?


1. Bild
upload_2017-1-2_18-0-45.png


2. Bild
upload_2017-1-2_18-1-35.png
 

Anhänge

  • upload_2017-1-2_18-0-37.png
    upload_2017-1-2_18-0-37.png
    27,1 KB · Aufrufe: 1
sorry, ich idiot, habe vorlesung statt vorlesungen geschrieben.
ich kann das programm starten , aber wenn ich versuche eine neue vorlesung anzulegen, erhalte ich :

Uncaught Exception:
SQLSTATE[23502]: Not null violation: 7 FEHLER: NULL-Wert in Spalte „v_vorid“ verletzt Not-Null-Constraint DETAIL: Fehlgeschlagene Zeile enthält (null, 33, 10, a:4:{s:21:"tut_scheine_vorlesung";s:11:"test-landau";s:15:"tut_b..., test-landau).


Soll ich auch als Standardwert 0 setzen, sowie in der tabelle 'punkte'

upload_2017-1-2_18-14-42.png
 
Tja.

Du hast die Tabellen "vorlesung" und "vorlesungen_1", fragst aber "vorlesungen" ab. Was soll PostgreSQL machen außer zu sagen, daß es diese Tabelle nicht gibt?
 
in den anderen tabellen 'punkte', und so weiter sind in den spalten , wo der datentyp integer ist auch noch der standardwert 0 gesetzt.
(Übrigens nicht von mir angelegt!).
Mein Vorgänger hat die spalten auf not null gesetzt und andrerseit den standardwert 0 gesetzt,
könnte es daran liegen, dass ich den standardwert nicht auf null gesetzt habe?
 
Werbung:
NULL ist nicht 0. Sieht anders aus, schreibt man anders, ist was anderes. 0 ist die ganze Zahl zwischen -1 und 1. 0 und 5 ergibt 5. NULL ist die komplette Abwesenheit einer Information, man kann daher auch nicht NULL + 5 rechnen - das bleibt NULL. Eine Spalte auf NOT NULL und gleichzeitig auf Default 0 zu setzen ist also KEIN Widerspruch.

Man setzt NOT NULL, wenn man erzwingen will, daß zwingend etwas angegeben werden muß. Sei es ein Accountname oder der Betrag eine Geld-Transaktion - überall dort, wo es ganz rein logisch keinen Sinn macht zu sagen: 'Hey, ich weiß nicht, welchen Wert das da grade hat'. Wo also die Abwesenheit einer Information nicht akzeptabel ist.

Einen Standardwert setzt man, wenn man weiß, daß i.d.R. etwas einen bestimmten Wert hat. Z.B. eine Uni in der Tabelle der Studenten: ein neuer Eintrag da ist i.d.R. eine Neu-Imatrikulation, da ist das Feld, ob er noch aktiv ist, erst einmal immer TRUE. Erst nach seiner Entlassung kann man das auf FALSE setzen, hebt aber den Datensatz auf - weil gesetzliche Pflichten und so, Bürokratischer Kram, wissen's schon.
 
Zurück
Oben