Try the following using pltcl
CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER AS '
foreach id [array names OLD] {
if { $OLD($id) != $NEW($id) {
# do your logging in here or flags whatever you wish
}
}
return [array get NEW]
' LANGUAGE 'pltcl';
HTH
Darren
On Mon, 1 Sep 2003, Josué Maldonado wrote:
> Hi Doug,
>
> Thanks for anwsers, do you have some sample code or URL where I can get
> more info on this. I don't know C or Perl but really need to get this done.
>
> Thanks,
>
> Doug McNaught wrote:
>
> >Josué Maldonado <josue@lamundial.hn> writes:
> >
> >
> >
> >>Hello list,
> >>
> >>First of all, excuse me if this is not the right place to ask my question.
> >>
> >>Is there a way in postgresql to loop to all the fields of a given
> >>table and compare the OLD and NEW value for each field. I need to make
> >>an audit table that must contain only the fields changed after and
> >>insert/update.
> >>
> >>
> >
> >You should be able to do this in a Perl or C trigger. It can't be
> >done in PL/pgSQL without writing a custom trigger for each table that
> >hard-codes all the field names.
> >
> >-Doug
> >
> >---------------------------(end of broadcast)---------------------------
> >TIP 3: if posting/reading through Usenet, please send an appropriate
> > subscribe-nomail command to majordomo@postgresql.org so that your
> > message can get through to the mailing list cleanly
> >
> >
> >
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
> joining column's datatypes do not match
>
--
Darren Ferguson