Frage bezüglich trigger

Grüß Euch!

Ich hätte eine Frage bezüglich ‘trigger’ - vielleicht habt Ihr ja eine Lösung für mich :wink:

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!

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…

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

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?

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

na fein, wohin kann ich nun die Rechnung schicken? :wink: