Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert sind; Die von diesem Forum gesetzten Cookies düfen nur auf dieser Website verwendet werden und stellen kein Sicherheitsrisiko dar. Cookies auf diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Bekanntmachungen
FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint ...
#1
Liebe Kollegen,

an einigen Schulen ist der Umzug der Daten von Access auf die PostGreSQL-Datenbank offensichtlich nicht sauber verlaufen. Dadurch kommt es beim Erstellen von neuen Datensätzen (z. B. bei Ordnungsmaßnahmen, Leistungsnachweisen, Transportmedium, ...) zu dem Fehler
Code:
FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint »...«
.

Erklärung:
Alle Tabellen der NM-Datenbank haben einen Primärschlüssel mit einer laufenden Nummer. Die Nummer für den nächsten Datensatz wird dabei durch eine sogenannte "Sequenz" erzeugt, die beim abliefern einer solchen Nummer automatisch eins hochgezählt wird. Somit ist der aktuelle Wert einer solchern Sequenz immer 1 größer als der größte Primärschlüssel.

Normalerweise zumindest. Offensichtlich ist die Sequenz bei der Übernahme der Daten aus der Accessdatenbank nicht sauber hochgezählt worden (warum auch immer, muss ich noch mal schauen - geht ja eigentlich automatisch). Dadurch ist jetzt der aktuelle Wert der Sequenz kleiner als größte Primärschlüssel. Wird jetzt ein neuer Datensatz erstellt liefert die Sequenz einen Wert ab, der schon existiert und es wird ein Fehler erzeugt.

Lösung:
Das Problem kann manuell gelöst werden. Ich erkläre es am Beispiel der Tabelle "lnw" für Leistungsnachweise, es funktioniert aber mit allen anderen Tabellen gleich.
  1. Datensicherung der NM-Datenbank erstellen
  2. PGAdmin starten, mit dem Server verbinden und die NM-Datenbank auswählen.
  3. über "Schemata > public > Tabellen > lnw" zur Tabelle durchklicken, dann über das Tabellensymbol in der Symbolleiste (rechts neben der Lupe) die Daten anzeigen.
  4. Die Spalte "lfdnr" ist mit [PK] markiert, das ist der Primärschlüssel. Normalerweise ist die Tabelle nach dieser Spalte sortiert, ganz unten steht also der größte Wert, z. B. 132.
  5. Jetzt zur zugehörigen Sequenz unter "Schemata > public > Sequenzen" wechseln. Die Sequenzen folgen dem Schema Tabellenname_Spaltenname_seq. Wir brauchen also lnw_lfdnr_seq.
  6. Über einen rechten Mausklick lassen sich die Eigenschaften der Sequenz anzeigen.
  7. Auf der zweiten Seite "Definition" steht der "Aktuelle Wert". Der dürfte also kleiner sein als der eben abgelesene Wert. Gemäß des obigen Beispiels nur 95.
  8. Dieser Wert kann jetzt einfach abgeändert werden. Mindestens auf den größten Wert aus der Tabelle plus 1 (im Beispiel also 133), man kann aber auch deutlich mehr angeben, z. B. 140 oder 150. Letzteres macht Sinn, wenn man die Änderungen im laufenden Betrieb vornimmt und möglicherweise gerade jemand neue Leistungsnachweise anlegt.
  9. Abschließend noch ein Klick auf OK und das Problem ist behoben.

Gruß
Stephan
RSS-Feed mit aktuellen Informationen über Updates, Änderungen in der Programmbedienung und anderen wichtigen Mitteilungen unter http://www.notenmanager.net/feeds/Notenmanager.xml
Zitieren
#2
Hallo Stephan,

bei mir werden in der Postgresql-Logdatei folgende Fehler angezeigt. Sind diese problematisch?

Oct 13 12:27:22 nm postgres[24949]: [2-1] FEHLER: Typmodifikator ist für Typ »text« nicht erlaubt bei Zeichen 44
Oct 13 12:27:22 nm postgres[24949]: [2-2] ANWEISUNG: ALTER TABLE Sys_Settings ADD HVBackupPath TEXT(250)
Oct 13 12:27:23 nm postgres[24949]: [3-1] FEHLER: Zeichenkette in Anführungszeichen nicht abgeschlossen bei »'Br);« bei Zeichen 211
Oct 13 12:27:23 nm postgres[24949]: [3-2] ANWEISUNG: UPDATE noten SET listpos = (SELECT faecher.lfdnr FROM faecher,unterricht WHERE unterricht.index = noten.uindex AND faecher.fachkuerzel = unterricht.fach AND unterricht.klasse <> 'WF' AND unterricht.lehrkraft = 'Br);
Oct 13 12:27:23 nm postgres[24949]: [4-1] FEHLER: Typmodifikator ist für Typ »text« nicht erlaubt bei Zeichen 44
Oct 13 12:27:23 nm postgres[24949]: [4-2] ANWEISUNG: ALTER TABLE Sys_Settings ADD HVBackupPath TEXT(250)


______________________________

Ebenso befinden sich in der Log-Datei etliche Meldungen der folgenden Form:

Oct 13 10:59:17 nm postgres[24466]: [21-1] FEHLER: ungültige Eingabesyntax für Typ timestamp: »10:59:20« bei Zeichen 113
Oct 13 10:59:17 nm postgres[24466]: [21-2] ANWEISUNG: BEGIN;INSERT INTO notenlog (nnr,datum,uhrzeit,spalte,notenwert,notendaten,nmuser,sync) VALUES (388,'13.10.2014','10:59:20',10,'4','13.10.2014###13.10.2014#10:57:32#1','Ki',False);
Zitieren
#3
Hallo Peter,

nein, nichts davon ist problematisch. Zwei der Fehler beziehen sich auf eine noch nicht veröffentlichte Funktion, der zugehörige Code dürfte bei euch eigentlich gar nicht ausgeführt werden.
Der dritte Fehler ist ein SQL-Befehl, der eigentlich nur bei Verwendung einer Access-Datenbank ausgeführt werden sollte.

Ich habe beides bereinigt, mit den nächsten Updates (NMSync, NMAdmin, Schulversion heute) verschwinden die Fehlermeldungen.

Gruß
Stephan
RSS-Feed mit aktuellen Informationen über Updates, Änderungen in der Programmbedienung und anderen wichtigen Mitteilungen unter http://www.notenmanager.net/feeds/Notenmanager.xml
Zitieren


Gehe zu:


Deutsche Übersetzung: MyBB.de, Powered by MyBB, © 2002-2020 MyBB Group.