Thread: problem with keyword 'old'

problem with keyword 'old'

From
"Basilis Kladis"
Date:
I am ussing Postgresql v. 6.3 in a RedHat Linux system. I try to create a
rule to log the deletes on table 'filter' ussing the following:
CREATE RULE log_delete_filter AS  ON DELETE TO filter DO INSERT INTO log_activity (mod_table, mod_record, mod_type)
VALUES('filter', old.did, 'D');
 
The atributes of tables are:   filter (did int4, text text)   log_activity (mod_table char(20), mod_rec int4, mod_type
char(1))
 
I have the following result:   ERROR:  old: Table does not exist.and the rule is not created.
I tested a same rule on INSERT with the keyword new.did and is working
perfect.Also I tested the commands:SELECT new.did;> ERROR:  NEW used in non-rule querySELECT current.did;>ERROR:
CURRENTused in non-rule querySELECT old.did;>ERROR:  old: Table does not exist.
 
What is going on? Do you have any idea why does system not undestand
keyword 'old'?

Sincerely,Basilis Kladis <bkladis@knowledge.gr>

Βασίλης Κλάδης
Language Engineering Dept.
KNOWLEDGE S.A.



Re: problem with keyword 'old'

From
Jan Wieck
Date:
Basilis Kladis wrote:
[Charset iso-8859-7 unsupported, filtering to ASCII...]
>  I am ussing Postgresql v. 6.3 in a RedHat Linux system. I try to create a
> rule to log the deletes on table 'filter' ussing the following:
   First  of  all, the rule system up to version 6.3 is known to   be broken in several ways. And IIRC delete rules
whereone of   the cases that didn't work reliable.
 
   To  answer your question, in 6.3 the old row is identified by   the keyword CURRENT, not OLD.


Jan

>
>  CREATE RULE log_delete_filter AS  ON DELETE TO filter
>   DO
>   INSERT INTO log_activity (mod_table, mod_record, mod_type)
>   VALUES ('filter', old.did, 'D');
>
>  The atributes of tables are:
>     filter (did int4, text text)
>     log_activity (mod_table char(20), mod_rec int4, mod_type char(1) )
>
>  I have the following result:
>     ERROR:  old: Table does not exist.
>  and the rule is not created.
>
>  I tested a same rule on INSERT with the keyword new.did and is working
> perfect.
>  Also I tested the commands:
>  SELECT new.did;
>  > ERROR:  NEW used in non-rule query
>  SELECT current.did;
>  >ERROR:  CURRENT used in non-rule query
>  SELECT old.did;
>  >ERROR:  old: Table does not exist.
>
>  What is going on? Do you have any idea why does system not undestand
> keyword 'old'?
>
> Sincerely,
>  Basilis Kladis <bkladis@knowledge.gr>
>
> _______ ______
> Language Engineering Dept.
> KNOWLEDGE S.A.
>


--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #