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


Nachrichten in diesem Thema
FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint ... - von NM-Himself - 09.10.2014, 13:35

Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Prüfung - Fehler "Constraint ..." derwing 11 2.351 13.12.2023, 16:34
Letzter Beitrag: NM-Himself

Gehe zu:


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