cagksw
8. November 2018 um 10:07
1
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!
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…
cagksw
8. November 2018 um 11:21
3
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?
cagksw
8. November 2018 um 12:19
5
Super - das ist genau was ich meinte! Ein großes Dankeschön aus Wien!
na fein, wohin kann ich nun die Rechnung schicken?