Re: Is it possible to redirect an update/insert/delete to a different table?

From: Andy Ballingall <andy(at)areyoulocal(dot)co(dot)uk>
To: "'Andreas Kretschmer'" <akretschmer(at)spamfence(dot)net>, <pgsql-sql(at)postgresql(dot)org>
Subject: Re: Is it possible to redirect an update/insert/delete to a different table?
Date: 2005-11-20 16:37:54
Message-ID: ECOWS05MDz4WolWa4lU00023f54@smtp-out5.blueyonder.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hi Andreas,

The rule you've given only works for an update which changes the name.

If I do another update which changed the colour instead of the name, that
rule wouldn't do the right thing.

Instead, I'm looking for something which, with a single 'rule' (or whatever
the mechanism ends up being), intercepts *any* update on apples, and applies
the changes to the pears table instead, as if the only change that occurred
was a change of table name.

I can achieve this in the application which generates the sql commands, but
someone else suggested it was possible with rules, but it may not be the
case.

Thanks!
Andy

-----Original Message-----
From: pgsql-sql-owner(at)postgresql(dot)org [mailto:pgsql-sql-owner(at)postgresql(dot)org]
On Behalf Of Andreas Kretschmer
Sent: 20 November 2005 16:17
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: [SQL] Is it possible to redirect an update/insert/delete to a
different table?

Andy Ballingall <andy(at)areyoulocal(dot)co(dot)uk> schrieb:

> Hello Peter,
>
> I'm glad it's possible, but I can't see how from the documentation.
>
> Say if I have a table called 'apples' and a table called 'pears'.
>
> What would the rule look like that would remap all updates on apples so
that
> they were applied to pears instead?

create rule apples_pears_update as on update to apples do instead update
pears set name= NEW.name where id=NEW.id ;

test=# select * from apples ;
id | name
----+------
1 | a
(1 row)

test=# select * from pears ;
id | name
----+------
1 | b
(1 row)

test=# update apples set name = 'c' where id = 1;
UPDATE 1
test=# select * from pears ;
id | name
----+------
1 | c
(1 row)

http://www.postgresql.org/docs/8.1/interactive/rules-update.html

HTH, Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°

---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.362 / Virus Database: 267.13.4/176 - Release Date: 20/11/2005

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Andreas Kretschmer 2005-11-20 16:42:34 Re: Is it possible to redirect an update/insert/delete to a different table?
Previous Message Andreas Kretschmer 2005-11-20 16:17:15 Re: Is it possible to redirect an update/insert/delete to a different table?