Обсуждение: infinite recursion detected in rules for relation "..."

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

infinite recursion detected in rules for relation "..."

От
Sebastian Böck
Дата:
Hello all,

i have a problem migrating my application from version
7.4 to 8.0. Everything is fine in 7.4 but with 8.0 i get
the following error:

infinite recursion detected in rules for relation "..."

I've been able to narrow the problem down to the
attached SQL.

I don't know wether its a bug or a "feature".

Can someone explain me this behaviour.

Thanks in advance

Sebastian
CREATE TABLE ref (
    name TEXT NOT NULL PRIMARY KEY
);

CREATE TABLE test (
    id SERIAL PRIMARY KEY,
    col1 TEXT NOT NULL UNIQUE,
    col2 TEXT NOT NULL REFERENCES ref ON UPDATE CASCADE
);

CREATE TABLE log (
    id INTEGER NOT NULL,
    col1 TEXT NOT NULL,
    col2 TEXT NOT NULL
);
CREATE OR REPLACE RULE log AS ON UPDATE TO test
    DO INSERT INTO log VALUES (OLD.id,OLD.col1,OLD.col2);

CREATE VIEW bug AS
    SELECT * FROM test;
CREATE OR REPLACE RULE upd AS ON UPDATE TO bug
    DO INSTEAD NOTHING;
CREATE OR REPLACE RULE upd_col1 AS ON UPDATE TO bug
    WHERE NEW.col1 <> OLD.col1
    DO UPDATE test SET col1 = NEW.col1 WHERE id = OLD.id;
CREATE OR REPLACE RULE upd_col2 AS ON UPDATE TO bug
    WHERE NEW.col2 <> OLD.col2
    DO UPDATE test SET col2 = NEW.col2 WHERE id = OLD.id;

INSERT INTO ref (name) VALUES ('Name');
INSERT INTO test (col1,col2) VALUES ('Test 1','Name');

UPDATE bug SET col1 = 'Test' WHERE id = 1;

Re: infinite recursion detected in rules for relation "..."

От
Tom Lane
Дата:
=?ISO-8859-1?Q?Sebastian_B=F6ck?= <sebastianboeck@freenet.de> writes:
> i have a problem migrating my application from version
> 7.4 to 8.0. Everything is fine in 7.4 but with 8.0 i get
> the following error:
> infinite recursion detected in rules for relation "..."

> I don't know wether its a bug or a "feature".

It's a bug.  Thanks for the report.

            regards, tom lane

Re: infinite recursion detected in rules for relation "..."

От
Tom Lane
Дата:
=?ISO-8859-1?Q?Sebastian_B=F6ck?= <sebastianboeck@freenet.de> writes:
> infinite recursion detected in rules for relation "..."

If you need a patch immediately, here it is.

*** src/backend/rewrite/rewriteHandler.c.orig    Sat Nov  6 12:46:35 2004
--- src/backend/rewrite/rewriteHandler.c    Sat Nov 20 12:47:21 2004
***************
*** 1267,1272 ****
--- 1267,1274 ----
                      newstuff = RewriteQuery(pt, rewrite_events);
                      rewritten = list_concat(rewritten, newstuff);
                  }
+
+                 rewrite_events = list_delete_first(rewrite_events);
              }
          }


            regards, tom lane

Re: infinite recursion detected in rules for relation "..."

От
Sebastian Böck
Дата:
Tom Lane wrote:
> =?ISO-8859-1?Q?Sebastian_B=F6ck?= <sebastianboeck@freenet.de> writes:
>
>>infinite recursion detected in rules for relation "..."
>
>
> If you need a patch immediately, here it is.
>
> *** src/backend/rewrite/rewriteHandler.c.orig    Sat Nov  6 12:46:35 2004
> --- src/backend/rewrite/rewriteHandler.c    Sat Nov 20 12:47:21 2004
> ***************
> *** 1267,1272 ****
> --- 1267,1274 ----
>                       newstuff = RewriteQuery(pt, rewrite_events);
>                       rewritten = list_concat(rewritten, newstuff);
>                   }
> +
> +                 rewrite_events = list_delete_first(rewrite_events);
>               }
>           }
>
>
>             regards, tom lane

Thanks for the quick patch!
Everything is working now.

Sebastian