SQLSTATE[23502]: Not null violation:

okay, ich habe es jetzt mal geändert, siehe bild.
dann bin ich jetzt wieder am anfabg, denn wenn ich wieder versuche einstellungen zu speichern, die genau da rein gehören,
erhalte ich wieder die fehlermeldung. was mache ich falsch


upload_2017-1-2_19-36-33.png


nachdem ich die felder ausfülle und speichern klicke



upload_2017-1-2_19-41-30.png



kommt folgendes:

Uncaught Exception:

SQLSTATE[23502]: Not null violation: 7 FEHLER: NULL-Wert in Spalte „v_semester“ verletzt Not-Null-Constraint DETAIL: Fehlgeschlagene Zeile enthält (0, null, null, a:4:{s:21:"tut_scheine_vorlesung";s:11:"test-landau";s:15:"tut_b..., null).
 
Werbung:
okay, ich habe es jetzt mal geändert, siehe bild.
dann bin ich jetzt wieder am anfabg, denn wenn ich wieder versuche einstellungen zu speichern, die genau da rein gehören,
erhalte ich wieder die fehlermeldung. was mache ich falsch

Wie soll ich das wissen?

Vermutlich arbeitet Deine Applikation nicht korrekt - aber das ist nur eine ganz, ganz wilde Vermutung. Du kannst mir aber glauben: PostgreSQL arbeitet korrekt. Wenn eine Spalte als NOT NULL definiert ist kannst Du da halt eben keine NULL-Werte eintragen. Wowereit.

Schau Dir die Applikation an, dort versuchst Du, das SQL, welches an die DB geht, mal irgendwie zu loggen. Du wirst sehen: es ist falsch. Falsch im Sinne daß dort in NOT NULL - definierten Spalten NULL steht.

Peng!

PS.: man sieht das schon ganz gut an der Fehlermeldung. Der vierte Parameter für v_config sieht etwas wie ein JSON aus. Davon abgesehen, daß PG direkt Datentypen für JSON hat, ist der Wert da falsch gequotet. Aber, again: Applikationsproblem, kein Problem der DB.

Andreas
 
'Applikationsfehler' ist Fehler in der Applikation/der Anwendung. Um das ganz kurz nachzustellen:

Code:
test=*# create table foo(i int not null);
CREATE TABLE
test=*# insert into foo (i) values (NULL);
FEHLER:  NULL-Wert in Spalte »i« verletzt Not-Null-Constraint
DETAIL:  Fehlgeschlagene Zeile enthält (null).
test=*#

Im CREATE TABLE sagst Du der DB, daß die Spalte i in der Tabelle foo kein NULL enthalten darf, im INSERT versuchst Du aber, ein NULL einzufügen. Die DB macht genau das, was sie machen soll: sie verweigert die Arbeit. Das Problem ist also in der Anwendung, die versucht, da ein NULL einzugeben. Fixe die Anwendung, erschlage den Programmierer derselben oder nehme solange Urlaub, bis das Problem sich von selbst erledigt (natürlicher Tod, $whatever). Aber gib nicht der DB die Schuld, die macht nur ihren Job.
 
mache ich nicht, aber so komme ich nicht weiter. Ich versteh nicht, warum
' INSERT versuchst Du aber, ein NULL einzufügen'
Ich fülle alle felder aus, und keins davon ist null. ich habe das nicht verstanden.

jetzt habe ich noch das problem, dass ich, nachdem die daten importiert habe, sie zwar in der db sind, aber nicht mehr angezeigt werden, wenn ich die seite aufrufe.
 
mache ich nicht, aber so komme ich nicht weiter. Ich versteh nicht, warum
' INSERT versuchst Du aber, ein NULL einzufügen'
Ich fülle alle felder aus, und keins davon ist null. ich habe das nicht verstanden.
Fehler in der Anwendung?

jetzt habe ich noch das problem, dass ich, nachdem die daten importiert habe, sie zwar in der db sind, aber nicht mehr angezeigt werden, wenn ich die seite aufrufe.

Fehler in der Anwendung?

Ich traue keiner Anwendung. Versuche all das in plain psql, also dem Command Line - Interface von PostgreSQL. Und Du wirst sehen, daß alles funktioniert.
 
Die Aplikation hat ein Formular in das du Informationen für die einzelnen Fehlder einträgst. Aus diesen Informationen formt die Aplikation einen INSERT-Befehl. Fehlt ein Feld für die Information deiner Zielspalte oder wird die Information nicht im Insert für die richtige Spalte übergeben dann versucht die DB einen Datensatz ohne diese Information anzulegen. Alle Felder die nicht angegeben werden sind dann NULL und das geht dank deiner Einschränkung NOT NULL eben nicht. Um das mal mit akretschmer's Code zu demonstrieren:
Code:
test=*# create table foo(i1 int null, i2 int not null);
CREATE TABLE
test=*# insert into foo (i1,i2) values (23,23);
ok
test=*# insert into foo (i1,i2) values (NULL,23);
ok
test=*# insert into foo (i2) values (23);
ok
test=*# insert into foo (i2) values (NULL);
FEHLER: NULL-Wert in Spalte »i2« verletzt Not-Null-Constraint
DETAIL: Fehlgeschlagene Zeile enthält (null).
test=*# insert into foo (i1) values (23);
FEHLER: NULL-Wert in Spalte »i2« verletzt Not-Null-Constraint
DETAIL: Fehlgeschlagene Zeile enthält (null).
test=*#
Dadurch das dein Constraint bisher nicht auf der Tabelle war hat dein Formular in der Vergangenheit funktioniert. Offensichtlich hat die Information auch nicht in der DB gefehlt daher stellt sich durchaus erstmal die Frage warum du überhaupt versuchst einen NOT NULL-Constraint auf die Spalte zu legen.
 
okay, eigentlich soll es auch so gedacht sein, dass felder auch leer bleiben können. bis auf die v_vorid, denn man muss aufjedenfall eine vorlesung anlegen, bevor es zu den einstellungen, punkten usw. geht.
daher müssen die spalten auch nicht auf 'not null ' sein, oder?
das müsste dann doch auch so funktioniern?
upload_2017-1-3_15-14-15.png
 
das problem ist, wenn ich es so belasse, und dann die eingabefelder werte eingeben, erhalte ich jetzt nicht mal mehr eine fehlermeldung, sondern das fenster wird weiß.
und in ´der db steht jetz eine null zeile in der spalte name, obwohl ich einen namen eingegeben habe.

ich würde gerne wissen, was ich ändern muss, damit es funktioniert
 
Zuletzt bearbeitet:
ich wollte eigentlich nichts am programm ändern, denn es hat ja zuvor auch gut funktioniert. und der code ist auch nicht von mir.
am programm gab es keine änderungen. nur in der db.

ich wollte das problem in der db lösen.
 
Wenn du etwas an der DB geändert hast dann mache die Änderungen Rückgängig oder spiele das Backup von vor den Änderungen ein.
 
Werbung:
ich kann es nicht rückgängig machen, da ich dabei eine fehlermeldung erhalte.
wenn ich alles neu mache und mein dump.csv hochladen, dann erscheinen die einstellungen bei programmaufruf nicht mehr
sorry, wenn ich nerve
 
Zurück
Oben