"currval" - Falsche Werte

Nein. Currval liefert keine fehlerhaften Ergebnisse, es liefert nur andere Ergebnisse also Du erwartest, die allerdings absolut korrekt sind(!!!)

In diesem Zusammenhang vielleich ein Hinweis:

Curval ist nur in der Datenbanksession korrekt definiert, in der du den insert durchgeführt hast.

Wohlgemerkt Datenbanksession! (Hat nichts mit connection zu tun.)

Das bedeutet konkret, dass das Ergebnis von curval bereits dann nicht mehr akkurat sein kann ist, wenn Du

1.) eine Datensatz in Schema A einfügst (DB-Session 1)
2.) irgendwas in schma B machst (DB-Session 2)
3.) curval in Schema A abfragst (DB Session 3)

Paste doch im zweifel mal den betroffenen Appcode und Postgres-Logfiles

Grüße

Jochen

dasblauehandtuch: dein Posting ist komisch …

currval arbeitet Verbindungsorientiert.

Beispiel:

Verbindung 1: INSERT, die Sequenz erzeugt ID 15
Verbindung 2: INSERT, die Sequenz erzeugt ID 16
Verbindung 2: INSERT, die Sequenz erzeugt ID 17
Verbindung 1: currval() liefert 15
Verbindung 2: currval() liefert 17
Verbindung 3: currval() liefert einen Fehler -> keine Nutzung bisher in der Verbindung

Was allerdings noch beliebt ist: wenn irgendwelche Trigger greifen und weitere Sequenze Werte verbrauchen. Aber anhand des Beispiels sollte das eher nicht der Fall sein.

Ich denke, Trigger sollten in der Tat nicht das Problem sein. Davon abgesehn nutze ich nicht mal welche.


Ich denke nicht, dass die Sequenzen von Schema 1 und Schema 2 vertauscht wurden, da das fehlerhafte Ergebnis weder zum aktuellen Wert von Schema 1 und 2 passt,Wenn Sequenz Schema A, Nextvalue() 12.000 hat und Nextvalue() 100.000 von Schema B, dann erhalte ich manchmal 7,8,9 (inkrementell). Sonst funktioniert alles wirklich wunderbar.

Nun, dann:

Logfiles und Code bitte hier pasten.

Sonst kommen wir wohl nicht weiter. Im Log das Query Logging einschalten.

Jep werd ich die Tage machen, kann aktuell den Server noch nicht ausschalten. Werde hier dann Weiteres posten.

@ads

@ dasblauehandtuch: dein Posting ist komisch … currval arbeitet Verbindungsorientiert.

Kann sein. Ich hatte allerdings mal ein ähnliches Problem, daher bin ich mir relativ sicher, dass curval (aus applikationssicht) nicht auf conncection-basis arbeitet (und das meinte ich), aus datenbanksicht sehr wohl.

Will sagen, je nach db-Abstraction layer kann(!!) es vorkommen, dass z.B. nach einem commit die db-session (dbconnection auf server) geschlossen wird und bereits direkt danach ein curval fehlschlägt.

Allerdings resultierte dies stets ein einem ‘curval noch nicht verfügbar’, falsche werte habe ich noch nie bekommen …

Lass mich aber gerne eines besseren belehren :wink: