Re: field incrementing in a PL/pgSQL trigger

From: Pierre-Frédéric Caillaud <lists(at)boutiquenumerique(dot)com>
To: tvadnais(at)earthlink(dot)net, pgsql-general(at)postgresql(dot)org
Subject: Re: field incrementing in a PL/pgSQL trigger
Date: 2004-10-24 06:53:52
Message-ID: opsgc332wdcq72hf@musicbox
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Create a different trigger function for each table, then each trigger can
be customized to know the column names.
You can generate the triggers from a little script which queries the
system tables to get at the column names. It would spit code like 'IF
NEW.fieldname != OLD.fieldname THEN (record modification...) END IF for
each field...
Less elegent than a general solution, but why not.

> Hi,
>
> My boss wants to add some logging functionality to some of our tables on
> update/delete/insert. I need to log who, when, table_name, field name,
> original value and new value for each record, but only logging modified
> fields, and he wants me to do this wing postgres pgSQL triggers.
>
> We are given 10 automatically created variables. Some of which I know I
> can
> use: NEW, OLD, TG_WHEN, TG_OP and TG_RELNAME. I can use these to get
> general information for the update, but when the trigger is called, I
> don't
> know how many fields are in the tables that are being updated.
>
> My questions are: Is there a way I can dynamically determine the number
> of
> fields in the row that is being maintained. (a function much like:
> PQnfields(const PGresult *); )
> Then I need a way to get the name of the field (using a function much
> like:
> PQfname(const PGresult *, int); )
>
> Using the dynamically generated name I could then walk the NEW and OLD
> rows
> to compare the values. (e.g. if (NEW.field != OLD.field) do something;);
>
> Can anyone help me with this? Thank you in advance.
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Pierre-Frédéric Caillaud 2004-10-24 07:13:14 Re: '1 year' = '360 days' ????
Previous Message Scott Marlowe 2004-10-24 06:02:26 Re: Duplicating a database