ich muss eine Datenbank (Gupta-SQLBase) nach PostgreSQL migrieren und habe folgendes Problem: Die alte Datenbank verwendet eine Sogenannte RowID, die sich mit jedem Update ändert, um optimistic Logging zu realisieren.
Unter PostgreSQL habe ich mir folgendes Vorgehen gedacht:
an jede Tabelle Tabelle die Spalte RowID (Als Char(20) anhängen. ok, schon erledigt
Eine Sequence anlegen. OK
Dann einen Trigger auf jede Tabelle setzen, der bei jedem Update den Wert in RowID auf den neuen Wert der Sequence setzt
Soweit eigentlich auch klar, aber ich kriege die Funktion (in SQL) nicht hin. Leider habe ich auch kein Beispiel gefunden. Woher weiss die Funktion, aus welcher Tabelle sie aufgerufen wird, wenn ich keine Paramater mitgeben kann, brauche ich für jede Tabelle eine eigene Funktion
Wäre prime wenn mir jemand weiterhelfen kann, oder sogar eine bessere Idee hat.
Hi zusammen, inzwischen habe ich die Lösung doch noch hinbekommen
Hier die Lösung, wenn Sie auch für andere interessant ist:
– Erst mal die Sequence anlegen
CREATE SEQUENCE sysadm.seq_rowid
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 100
CACHE 1;
ALTER TABLE sysadm.seq_rowid OWNER TO postgres;
COMMENT ON SEQUENCE sysadm.seq_rowid IS ‘Trigger für die interne RowID Verwaltung’;
– Dann die Triggerfunktion, die gar keinen Tabellennamen braucht
CREATE OR REPLACE FUNCTION sysadm.UpdateRowID() RETURNS trigger AS $emp_stamp$
Begin
New.RowID := nextval( ‘sysadm.seq_rowid’);
Return new;
End;
$emp_stamp$ LANGUAGE ‘plpgsql’ VOLATILE;
ALTER FUNCTION sysadm.UpdateRowID() OWNER TO sysadm;
– Und ein Beispieltrigger
create Trigger tr_time_Rowid Before Insert or Update on sysadm.User
For Each Row Execute Procedure sysadm.UpdateRowID();
Danke auch für den Tip oben, werde ich sicher noch brauchen