Обсуждение: ERROR (Bug?) in RULE processing ?

Поиск
Список
Период
Сортировка

ERROR (Bug?) in RULE processing ?

От
Fritz Lehmann-Grube
Дата:
Can somebody tell what this errormessage means ?
ERROR:  fireRIRrules: failed to remove aggs from qual

I don't know what "aggs" and "qual" is.

What I did:
arbeitsdb=# select id,type,subtype,name from documents;id | type | subtype |     name
----+------+---------+--------------- 1 |    1 |       5 | motiv_el_01 2 |    1 |       1 | def_el_01 3 |    2 |
10| deduc_el_01 4 |    2 |      18 | example_el_01
 
(4 rows)
arbeitsdb=# insert into documents(type,subtype,name)
arbeitsdb-# values (2,16,'foo');
INSERT 55505 1
arbeitsdb=# delete from documents where oid=55505;
DELETE 1
arbeitsdb=# CREATE RULE doc_contained AS ON INSERT TO documents WHERE
arbeitsdb-# ((NEW.type = 1) AND (count( (SELECT element_id
arbeitsdb(#   FROM element_contained_in WHERE (element_id =
currval('docs_seq')) )) = 0))
arbeitsdb-# DO INSTEAD NOTHING;
CREATE
arbeitsdb=# insert into documents(type,subtype,name)
arbeitsdb-# values (2,16,'foo');
ERROR:  fireRIRrules: failed to remove aggs from qual

Thanks     Fritz


Re: ERROR (Bug?) in RULE processing ?

От
Jan Wieck
Дата:
Fritz Lehmann-Grube wrote:
>
> Can somebody tell what this errormessage means ?
> ERROR:  fireRIRrules: failed to remove aggs from qual
>
> I don't know what "aggs" and "qual" is.
   The  rewrite  rule  system  was not able to combine the given   rule into your insert statement,  because  aggregate
clauses   (count()  here)  in the qualification (WHERE ...) are in fact   impossible.
 
   Your best bet it to implement that with a trigger.


Jan

>
> What I did:
> arbeitsdb=# select id,type,subtype,name from documents;
>  id | type | subtype |     name
> ----+------+---------+---------------
>   1 |    1 |       5 | motiv_el_01
>   2 |    1 |       1 | def_el_01
>   3 |    2 |      10 | deduc_el_01
>   4 |    2 |      18 | example_el_01
> (4 rows)
>
> arbeitsdb=# insert into documents(type,subtype,name)
> arbeitsdb-# values (2,16,'foo');
> INSERT 55505 1
> arbeitsdb=# delete from documents where oid=55505;
> DELETE 1
> arbeitsdb=# CREATE RULE doc_contained AS ON INSERT TO documents WHERE
> arbeitsdb-# ((NEW.type = 1) AND (count( (SELECT element_id
> arbeitsdb(#   FROM element_contained_in WHERE (element_id =
> currval('docs_seq')) )) = 0))
> arbeitsdb-# DO INSTEAD NOTHING;
> CREATE
> arbeitsdb=# insert into documents(type,subtype,name)
> arbeitsdb-# values (2,16,'foo');
> ERROR:  fireRIRrules: failed to remove aggs from qual
>
> Thanks  Fritz
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>


--

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



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com



Re: ERROR (Bug?) in RULE processing ?

От
Tom Lane
Дата:
Fritz Lehmann-Grube <lehmannf@math.TU-Berlin.DE> writes:
> Can somebody tell what this errormessage means ?
> ERROR:  fireRIRrules: failed to remove aggs from qual

The reason it's such an unfriendly error message is that it's an
internal "shouldn't ever happen" check.

What you actually did wrong was to use an aggregate function (count())
in the rule's WHERE clause.  This should have been rejected much further
upstream, like when you tried to create the rule.  That error test
doesn't seem to be there now though :-(
        regards, tom lane


Re: ERROR (Bug?) in RULE processing ?

От
Bruce Momjian
Дата:
I see the query:
arbeitsdb=# CREATE RULE doc_contained AS ON INSERT TO documents WHEREarbeitsdb-# ((NEW.type = 1) AND (count( (SELECT
element_idarbeitsdb(#  FROM element_contained_in WHERE (element_id =currval('docs_seq')) )) = 0))arbeitsdb-# DO INSTEAD
NOTHING;

Added to TODO:
* Prevent aggregates from being used in rule WHERE clauses

Also, please try using HAVING with count() and see if that helps.

---------------------------------------------------------------------------

Tom Lane wrote:
> Fritz Lehmann-Grube <lehmannf@math.TU-Berlin.DE> writes:
> > Can somebody tell what this errormessage means ?
> > ERROR:  fireRIRrules: failed to remove aggs from qual
> 
> The reason it's such an unfriendly error message is that it's an
> internal "shouldn't ever happen" check.
> 
> What you actually did wrong was to use an aggregate function (count())
> in the rule's WHERE clause.  This should have been rejected much further
> upstream, like when you tried to create the rule.  That error test
> doesn't seem to be there now though :-(
> 
>             regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
> 

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026