PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Postgresql-Trigger



rkauskh
10-03-2010, 17:22
Hallo

Ich versuche vergeblich einen Trigger zu erstellen.

IST-Zustand:
- eine Datenbank TestDB
- eine Tabelle TestTab
- zwei Spalten "datum" (date) und "uhrzeit" (time)
- eine Spalte "unixts" (Char)
- über psql copy ... importiere ich eine CSV-Datei (enthält datum und uhrzeit)in die Tabelle

Wunsch:
Für jeden neuen Datensatz soll über einen Trigger aus datum und uhrzeit der Unix-Zeitstempel errechnet und in die Spalte unixts eingetragen werden. Das Erzeugen des Zeitstempels habe ich soweit im Griff. Nur wie muß die Triggerfunktion und der Trigger definiert werden. Geht das mit Copy gar nicht, sondern nur mit einzelnen Inserts pro Datensatz?
Braucht man dafür einen Trigger oder gibt es eine bessere Lösung?

Mir fehlt da ein Ansatz.

MfG
rk

rkauskh
11-03-2010, 06:49
Moin

Drüber schlafen hat doch geholfen. Der Trigger funktioniert jetzt und reagiert wider Erwarten auch auf den Copy-Befehl. :)

rkauskh
04-03-2011, 23:52
Hallo

Muß das Thema leider wieder ausgraben. Die Tabelle hat mittlerweile 700.000 Datensätze. Mir ist aufgefallen, daß der tägliche COPY-Befehl, um die neuen Datensätze in die Tabelle zu kopieren immer mehr Laufzeit benötigt. Ich vermute das die Triggerfunktion schuld ist. Die Funktion ist:




DECLARE
aktoid oid;

BEGIN

aktoid = NEW.oid;

update Testtabelle set unixts=(select extract(epoch from (select to_timestamp(datum||uhrzeit,'DD.MM.YYYYHH24:MI:SS' ) from Testtabelle where oid=aktoid))) where oid=aktoid;

RETURN NEW;

END;


Ich denke die Suche nach dem Datensatz mit der aktuellen OID ist hier die Bremse. Die OID ist die PostgreSQL eigene. Ich erzeuge selbst keine. Eigentlich müßte doch der aktuelle Datensatz bekannt sein, wenn der Trigger nach einem INSERT auslöst.
Kann mir jemand einen Optimierungstip geben oder eine alternative Funktion?