[TYPO3-german] Autoincrement und PostgreSQL/DBAL

marcel.gsteiger at milprog.ch marcel.gsteiger at milprog.ch
Mon Mar 5 00:16:49 CET 2007


Christian Welzel schrieb:
> > Also Anfangswerte setzen!
> 
...das war das erste, das ich probiert hatte: die Spalte UID als Typ 
SERIAL deklariert, das erzeugt eine Sequenz mit passendem Namen, der man 
dann den "nächsten zu holenden Wert" setzen kann (der Anfangswert sollte 
bleiben wie er ist, sonst werden die Daten unplausibel).

Leider klappt das trotzdem nicht. Typo3 versucht immer noch, den 
falschen Wert einzufügen (weiss der Kuckuck wo der herkommt). Wenn ich 
einen Insert-Trigger schreibe, welcher statt des falschen Defaultwerts 
dann den richtigen Sequenzwert einfügt, macht DBAL keinen Fehler mehr 
(ich hab den Debugger eingeschaltet) und der Datensatz wird eingefügt, 
aber Typo3 bekommt dann gar nicht mit, welche neue uid dann dieser Zeile 
zugewiesen wurde und "verliert" den Datensatz im Backend. Hätte mich 
auch gewundert, wenn das funktionieren würde.

Aha, dachte ich mir, vielleicht frägt ja Typo3/DBAL/Adodb die letzte 
eingefügte OID ab, um an den eingefügten Datensatz zu kommen, und ich 
habe ja mit meinem PostgreSQL 8.1 defaultmässig keine OIDs mehr in den 
Tabellen. Ab 8.1 sollte man zwar statt lastoid lastval benutzen, aber 
dennoch habe ich die Tabelle mit OIDs nochmals neu aufgebaut, in der 
Hoffnung, es klappe dann. Aber auch das half nichts. Ob das Problem 
überhaupt bei Adodb oder dann gleich von Anfang an bei Typo3/DBAL liegt, 
weiss ich nicht.

Eigentlich wäre es einfach: ein "SELECT lastval()" liefert den letzten 
mittels nextval('sequenzname') in dieser Session generierten Wert, aber 
das müsste der Ado PostgreSQL Treiber doch wohl wissen? Leider gibt es 
lastval() erst seit PostgreSQL 8.1 .

Also suche ich immer noch nach einer Lösung...


More information about the TYPO3-german mailing list