Frage bezüglich trigger

Allgemeines zu PostgreSQL.
Antworten
cagksw
Neuer Benutzer
Beiträge: 15
Registriert: Do 28. Jun 2018, 14:20

Frage bezüglich trigger

Beitrag von cagksw » Do 8. Nov 2018, 11:07

Grüß Euch!

Ich hätte eine Frage bezüglich 'trigger' - vielleicht habt Ihr ja eine Lösung für mich ;)

Angenommen ich habe zwei Tables (invoice & invoice_items)
table invoice:

id invoice_date statement amount
1 2018-10-03 Insert 5
2 2018-10-03 Update 6

table invoice_items mit eingefügten Daten via trigger:

id total statement
1 5 Insert
2 6 Update

trigger:

create trigger do_fetch
after insert
on invoices
for each row
execute procedure insert_amount();

Jedoch will ich nur die Zeile in der statement == Update, also sollte der table invoice_items so ausschauen:

id total statement
2 6 Update

Der syntax lt. Docs: [FOR [EACH] {ROW | STATEMENT}]

Nun zu meiner Frage, wie müsste ich STATEMENT deklarieren?
In pseudo code: for each row where statement.value == 'Update'

Danke für Eure Hilfe!

akretschmer
Erfahrener Benutzer
Beiträge: 7513
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Frage bezüglich trigger

Beitrag von akretschmer » Do 8. Nov 2018, 11:22

mir ist nicht klar, was Du erreichen willst. Du hast eine Tabelle 'invoice', in der Du 'Insert' oder 'Update' speicherst? Und in invoice_items stehen dann die selben Spalten (id, total, statement) wie in invoice(id, statement, amount)?

Eventuell suchst Du die WHEN-Condition für das CREATE TRIGGER, damit kannst Du eine Art Where-Condition setzen, wann der Trigger feuern soll.

Aber, noch mal, ich versteh Dein ganzen Anliegen nicht...
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

cagksw
Neuer Benutzer
Beiträge: 15
Registriert: Do 28. Jun 2018, 14:20

Re: Frage bezüglich trigger

Beitrag von cagksw » Do 8. Nov 2018, 12:21

Entschuldige wenn das nicht ganz klar war. Ich will nur die Zeile, in welcher in der 'statement'-column der Wert 'Update' steht..

akretschmer
Erfahrener Benutzer
Beiträge: 7513
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Frage bezüglich trigger

Beitrag von akretschmer » Do 8. Nov 2018, 12:34

Code: Alles auswählen

test=# create table bla1(ts timestamp, content text);
CREATE TABLE
test=*# create table bla1_log(ts timestamp, content text);
CREATE TABLE
test=*# create or replace function trg_bla1() returns trigger as $$begin insert into bla1_log values (new.ts, new.content); return new; end; $$language plpgsql;
CREATE FUNCTION
test=*# create trigger trg1 after insert on bla1 for each row when (NEW.content = 'Update') execute procedure trg_bla1();
CREATE TRIGGER
test=*# insert into bla1 values (now(), 'bla');
INSERT 0 1
test=*# commit;
COMMIT
test=# insert into bla1 values (now(), 'Insert');
INSERT 0 1
test=*# commit;
COMMIT
test=# insert into bla1 values (now(), 'Update');
INSERT 0 1
test=*# select * from bla1;
             ts             | content 
----------------------------+---------
 2018-11-08 12:32:28.803439 | bla
 2018-11-08 12:33:30.355516 | Insert
 2018-11-08 12:33:38.451548 | Update
(3 rows)

test=*# select * from bla1_log ;
             ts             | content 
----------------------------+---------
 2018-11-08 12:33:38.451548 | Update
(1 row)

test=*#
so vielleicht?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

cagksw
Neuer Benutzer
Beiträge: 15
Registriert: Do 28. Jun 2018, 14:20

Re: Frage bezüglich trigger

Beitrag von cagksw » Do 8. Nov 2018, 13:19

Super - das ist genau was ich meinte! Ein großes Dankeschön aus Wien!

akretschmer
Erfahrener Benutzer
Beiträge: 7513
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Frage bezüglich trigger

Beitrag von akretschmer » Do 8. Nov 2018, 13:21

na fein, wohin kann ich nun die Rechnung schicken? ;-)
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten