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

Поиск
Список
Период
Сортировка
От Andy Ballingall
Тема Re: Is it possible to redirect an update/insert/delete to a different table?
Дата
Msg-id ECOWS05MDz4WolWa4lU00023f54@smtp-out5.blueyonder.co.uk
обсуждение исходный текст
Ответ на Re: Is it possible to redirect an update/insert/delete to a different table?  (Andreas Kretschmer <akretschmer@spamfence.net>)
Ответы Re: Is it possible to redirect an update/insert/delete to a different table?  (Andreas Kretschmer <akretschmer@spamfence.net>)
Список 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@postgresql.org [mailto:pgsql-sql-owner@postgresql.org]
On Behalf Of Andreas Kretschmer
Sent: 20 November 2005 16:17
To: pgsql-sql@postgresql.org
Subject: Re: [SQL] Is it possible to redirect an update/insert/delete to a
different table?

Andy Ballingall <andy@areyoulocal.co.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




В списке pgsql-sql по дате отправления:

Предыдущее
От: Andreas Kretschmer
Дата:
Сообщение: Re: Is it possible to redirect an update/insert/delete to a different table?
Следующее
От: Andreas Kretschmer
Дата:
Сообщение: Re: Is it possible to redirect an update/insert/delete to a different table?