Обсуждение: plPerl: How to iterate over $_TD->{new} in a trigger function?

Поиск
Список
Период
Сортировка

plPerl: How to iterate over $_TD->{new} in a trigger function?

От
Dirk Heinrichs
Дата:
Hi,

I want to write a generic trigger function, which can be attached to any
table, but it seems I'm to stupid :-) to get column/value pairs out of
$_TD->{new} and $_TD->{old}.

Here is my sample code:

create or replace function test_trig() returns trigger as $$       elog (INFO, "Table is: $_TD->{relname}\n");       my
%newrow= %_TD->{new};       elog (INFO, "$x=$y\n") while (($x,$y) = each %newrow);       return; 
$$ language plperl;

CREATE trigger trig1 after update or insert or delete on test for each row
execute procedure test_trig();

Table test can be anything. This is what I get when I insert something:

# insert into test (data) values ('foo');
INFO:  Table is: test

INFO:  =

INSERT 0 1

What I want to get at the second "INFO:" line is:

INFO: data=foo

Any hints?

Thanks...
Dirk

Re: plPerl: How to iterate over $_TD->{new} in a trigger function?

От
Dirk Heinrichs
Дата:
Am Mittwoch, 28. Juni 2006 20:00 schrieb Dirk Heinrichs:

> I want to write a generic trigger function, which can be attached to any
> table, but it seems I'm to stupid :-) to get column/value pairs out of
> $_TD->{new} and $_TD->{old}.

OK, got it myself.

> create or replace function test_trig() returns trigger as $$
>         elog (INFO, "Table is: $_TD->{relname}\n");
>         my %newrow = %_TD->{new};my %newrow = %{$_TD->{new}};
>         elog (INFO, "$x=$y\n") while (($x,$y) = each %newrow);
>         return;
> $$ language plperl;

Works as expected.

Bye...
Dirk