Thread: Update rule
Hello !
I wish to create a rule to write in records who and when modified them.
I wrote :
CREATE OR REPLACE RULE tarif_upd AS
ON UPDATE TO tarifs
DO ALSO
UPDATE tarifs
SET dmodtar = current_date, umodtar = current_user
WHERE dmodtar <> current_date AND umodtar <> current_user ;
But I obtain an infinite recursion !
ON UPDATE TO tarifs
DO ALSO
UPDATE tarifs
SET dmodtar = current_date, umodtar = current_user
WHERE dmodtar <> current_date AND umodtar <> current_user ;
But I obtain an infinite recursion !
It seems not using the where clause ?
Is it a bug ?
How can I workaround ...
How can I workaround ...
Best regards.
Luc
You get infinite recursion because your ON UPDATE rule does another UPDATE which of course calls the rule ; so no, it's not a bug ; also your UPDATE updates almost the whole table so it won't do what you had in mind in the first place. You should rather change the NEW row in your update so that NEW.dmodtar = current_date and NEW.umodtar = current_user. Which means you'll rather be using a trigger for this. Read the docs on CREATE TRIGGER and see the examples, I think there's one which looks like what you want. > Hello ! > > I wish to create a rule to write in records who and when modified them. > I wrote : > CREATE OR REPLACE RULE tarif_upd AS > ON UPDATE TO tarifs > DO ALSO > UPDATE tarifs > SET dmodtar = current_date, umodtar = current_user > WHERE dmodtar <> current_date AND umodtar <> current_user ; > But I obtain an infinite recursion ! > It seems not using the where clause ? > Is it a bug ? > How can I workaround ... > > Best regards. > Luc
Many thanks for your explanation. I found in the contrib the function moddatetime CREATE TRIGGER dmodtar_upd BEFORE UPDATE ON tarifs FOR EACH ROW EXECUTE PROCEDURE public.moddatetime(dmodtar) ; So all works fine ! PostgreSQL 8 is great. ----- Original Message ----- From: "Pierre-Frédéric Caillaud" <lists@boutiquenumerique.com> To: "Secrétariat" <ets@rolland-fr.com>; <pgsql-general@postgresql.org> Sent: Thursday, December 30, 2004 7:08 PM Subject: Re: [GENERAL] Update rule > > You get infinite recursion because your ON UPDATE rule does another > UPDATE which of course calls the rule ; so no, it's not a bug ; also your > UPDATE updates almost the whole table so it won't do what you had in mind > in the first place. You should rather change the NEW row in your update so > that NEW.dmodtar = current_date and NEW.umodtar = current_user. Which > means you'll rather be using a trigger for this. Read the docs on CREATE > TRIGGER and see the examples, I think there's one which looks like what > you want. > > >> Hello ! >> >> I wish to create a rule to write in records who and when modified them. >> I wrote : >> CREATE OR REPLACE RULE tarif_upd AS >> ON UPDATE TO tarifs >> DO ALSO >> UPDATE tarifs >> SET dmodtar = current_date, umodtar = current_user >> WHERE dmodtar <> current_date AND umodtar <> current_user ; >> But I obtain an infinite recursion ! >> It seems not using the where clause ? >> Is it a bug ? >> How can I workaround ... >> >> Best regards. >> Luc > > >