From: | Nico Mandery <nico(dot)mandery(at)geops(dot)de> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Rules, functions and RETURNING |
Date: | 2009-09-18 14:51:09 |
Message-ID: | 4AB39E5D.9030600@geops.de |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Adrian Klaver wrote:
> On Thursday 17 September 2009 8:35:52 am Nico Mandery wrote:
>> Hello list,
>>
>> I am trying to wirte a rule which calls a PLPgSQL-function upon an
>> Insert in a table. Here is a somewhat simplified example of what i got
>> so far:
>>
>> CREATE TABLE mytable (
>> mytable_id serial PRIMARY KEY,
>> something text
>> );
>>
>>
>> CREATE OR REPLACE FUNCTION _rule_insert_my(something text)
>> RETURNS integer AS
>> $BODY$
>> BEGIN
>> -- do something
>> return mytable_id;
>> END;
>> $BODY$
>> LANGUAGE 'plpgsql' VOLATILE
>> COST 100;
>>
>>
>> CREATE OR REPLACE RULE _insert AS
>> ON INSERT TO mytable DO INSTEAD SELECT
>> _rule_insert_my(new.something) AS mytable_id;
>>
>>
>> So far this works quite well. But I got a few situations where I need to
>> do a query which uses RETURNING to get the value of the newly generated
>> primary key. Like this one:
>>
>> INSERT INTO mytable (something) VALUES ('some text') RETURNING mytable_id;
>>
>> This breaks because I did not specify a RETURNING-Clause in the rule.
>> But how can specify RETURNING with SELECT?
>>
>>
>> Thank your in advance for your help.
>>
>> regards,
>> nico
>>
>> --
>> Nico Mandery
>
> I am going to assume that '--do something' is more complicated then getting the
> mytable_id. If that is the case why not create an INSERT function/trigger that
> does the 'something' and then just do:
> INSERT INTO mytable (something) VALUES ('some text') RETURNING mytable_id;
Adrian,
I just rewrote a few queries to use the function directly instead of an
insert. But a trigger which fires before the actual INSERT or UPDATE is
a good suggestion. In the case I do not want any data to be inserted in
the table, returning NULL from the trigger should do the trick.
thanks a lot.
regards,
nico
From | Date | Subject | |
---|---|---|---|
Next Message | Lew | 2009-09-19 02:38:07 | Re: Hibernate, web application and only one sequence for all primary keys |
Previous Message | rawi | 2009-09-18 07:41:04 | Thank you all for your help... |