From: | Robert Haas <robertmhaas(at)gmail(dot)com> |
---|---|
To: | Marcel Wieland <marcel(dot)wieland(at)fondsnet(dot)de> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: BUG #5202: Rule affecting more than one row is only fired once with LIMIT 1 |
Date: | 2009-11-23 04:35:12 |
Message-ID: | 603c8f070911222035l60754072lf311a19b816c208c@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Fri, Nov 20, 2009 at 9:58 AM, Marcel Wieland
<marcel(dot)wieland(at)fondsnet(dot)de> wrote:
>
> The following bug has been logged online:
>
> Bug reference: 5202
> Logged by: Marcel Wieland
> Email address: marcel(dot)wieland(at)fondsnet(dot)de
> PostgreSQL version: 8.2
> Operating system: Linux
> Description: Rule affecting more than one row is only fired once with
> LIMIT 1
> Details:
>
> BEGIN;
>
> -- Create testing Tables
> CREATE TABLE footable (
> name char
> );
> CREATE TABLE bartable (
> foo char
> );
>
> -- Insert testing Values
> INSERT INTO footable (name) VALUES('a'), ('b');
>
> -- RULE with LIMIT 1
> CREATE OR REPLACE RULE foorule AS ON UPDATE TO footable DO
> INSERT INTO bartable (foo) SELECT name FROM footable WHERE name =
> old.name LIMIT 1;
>
> -- Query fires Rule
> UPDATE footable SET name = name;
> -- Result
> SELECT * FROM bartable;
>
> -- Reset
> DELETE FROM bartable;
>
> -- RULE without LIMIT 1
> CREATE OR REPLACE RULE foorule AS ON UPDATE TO footable DO
> INSERT INTO bartable (foo) SELECT name FROM footable WHERE name =
> old.name;
>
> -- Query fires Rule
> UPDATE footable SET name = name;
> -- Result
> SELECT * FROM bartable;
>
> -- Cleanup
> DROP TABLE footable;
> DROP TABLE bartable;
>
> ROLLBACK;
See my response to your other bug report - same issues apply here.
...Robert
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2009-11-23 04:37:09 | Re: BUG #5205: Cannot ADD CONSTRAINT ... FOREIGN KEY... |
Previous Message | Robert Haas | 2009-11-23 04:34:23 | Re: BUG #5203: Rule affecting more than one row is only fired once, when there is no reference to the row. |