From: | Josh Berkus <josh(at)agliodbs(dot)com> |
---|---|
To: | Larry Rosenman <ler(at)lerctr(dot)org> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: trigger question |
Date: | 2002-05-16 18:05:48 |
Message-ID: | 200205161105.48972.josh@agliodbs.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Larry,
> I want to log the changes to it in a trigger. Occasionally we add fields to
it, so
> I'd like the trigger to know about them automatically. I need to log
old/new for just the fields
> that change (and the netblock, which is the primary key).
The problem is, there is no way for you to loop through all of the fields in a
RECORD without knowing in advance what those fields are. There is no
NEW.field(1) that I know of. And RECORD data types are not accessable in
dynamic EXECUTE strings.
So, two approaches:
1. do all this in C and manipulate the Postgres data libraries directly,
allowing you to loop through the collection of fields in a table. Don't ask
me how to do this; you'll have to take it up on PGSQL-HACKERS.
2. Save the entire old record (BEFORE update), and then the entire new record
(AFTER update) to a history buffer table. Use the pgsql system tables to
loop through the fields in the main table, logging each entry where the two
fields are different.
The two problems with approach #2 are: 1. you cannot reject updates this way,
and 2. it'll be dog slow.
The simpler solution is for you do decide on a permanent structure for your
table, neh?
--
-Josh Berkus
______AGLIO DATABASE SOLUTIONS___________________________
Josh Berkus
Complete information technology josh(at)agliodbs(dot)com
and data management solutions (415) 565-7293
for law firms, small businesses fax 621-2533
and non-profit organizations. San Francisco
From | Date | Subject | |
---|---|---|---|
Next Message | Scott Shattuck | 2002-05-16 18:33:12 | Re: trigger question |
Previous Message | Larry Rosenman | 2002-05-16 17:51:03 | Re: trigger question |