Thread: Converting mysql "on update" to postgres "rule"

Converting mysql "on update" to postgres "rule"

From
"Edward Blake"
Date:
Thanks to everyone who's helped me before.

I'm trying to create the following mysql table in postgres:

CREATE TABLE visit (
     data1 varchar(30) NOT NULL,
     data2 varchar(30) DEFAULT NULL,
     data3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

Thus far, I've been able to get this far:
CREATE TABLE visit (
     data1 varchar(30) NOT NULL,
     data2 varchar(30) DEFAULT NULL,
     data3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP);
CREATE RULE timestamp_update AS ON UPDATE TO visit
     DO ALSO
     UPDATE vist
          SET data3 = CURRENT_TIMESTAMP;

I've tried multiple iterations of how to accomplish this and keep getting stuck. With the one above, postgres yells and says:
ERROR:  infinite recursion detected in rules for relation "visit"

Any ideas?

Re: Converting mysql "on update" to postgres "rule"

From
Andrew Sullivan
Date:
On Tue, Mar 25, 2008 at 02:51:05PM -0400, Edward Blake wrote:
> CREATE RULE timestamp_update AS ON UPDATE TO visit

Do this with a trigger instead of a rule.  I think there's an example in the
docs of something very similar, but I haven't checked just now.

A


Re: Converting mysql "on update" to postgres "rule"

From
Rodrigo Gonzalez
Date:
Edward Blake escribió:
> Thanks to everyone who's helped me before.
>
> I'm trying to create the following mysql table in postgres:
>
> CREATE TABLE visit (
>      data1 varchar(30) NOT NULL,
>      data2 varchar(30) DEFAULT NULL,
>      data3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
> CURRENT_TIMESTAMP);
>
> Thus far, I've been able to get this far:
> CREATE TABLE visit (
>      data1 varchar(30) NOT NULL,
>      data2 varchar(30) DEFAULT NULL,
>      data3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP);
> CREATE RULE timestamp_update AS ON UPDATE TO visit
>      DO ALSO
>      UPDATE vist
>           SET data3 = CURRENT_TIMESTAMP;

You are in a loop...

Use a trigger that put NEW.data3 - CURRENT_TIMESTAMP
>
> I've tried multiple iterations of how to accomplish this and keep
> getting stuck. With the one above, postgres yells and says:
> ERROR:  infinite recursion detected in rules for relation "visit"
>
> Any ideas?



Attachment

Re: Converting mysql "on update" to postgres "rule"

From
Ben
Date:
You're looking for a trigger, not a rule.

On Tue, 25 Mar 2008, Edward Blake wrote:

> Thanks to everyone who's helped me before.
>
> I'm trying to create the following mysql table in postgres:
>
> CREATE TABLE visit (
>     data1 varchar(30) NOT NULL,
>     data2 varchar(30) DEFAULT NULL,
>     data3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
> CURRENT_TIMESTAMP);
>
> Thus far, I've been able to get this far:
> CREATE TABLE visit (
>     data1 varchar(30) NOT NULL,
>     data2 varchar(30) DEFAULT NULL,
>     data3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP);
> CREATE RULE timestamp_update AS ON UPDATE TO visit
>     DO ALSO
>     UPDATE vist
>          SET data3 = CURRENT_TIMESTAMP;
>
> I've tried multiple iterations of how to accomplish this and keep getting
> stuck. With the one above, postgres yells and says:
> ERROR:  infinite recursion detected in rules for relation "visit"
>
> Any ideas?
>

Re: Converting mysql "on update" to postgres "rule"

From
Charles Simard
Date:
 <snip>
|> I've tried multiple iterations of how to accomplish this and keep getting
stuck. With the one above, postgres yells and says:
|> ERROR:  infinite recursion detected in rules for relation "visit"
|>
|> Any ideas?
</snip>

Look at http://www.postgresql.org/docs/8.3/interactive/plpgsql-trigger.html