Re: Trigger function which inserts into table; values from lookup

Поиск
Список
Период
Сортировка
От novnov
Тема Re: Trigger function which inserts into table; values from lookup
Дата
Msg-id 10721651.post@talk.nabble.com
обсуждение исходный текст
Ответ на Re: Trigger function which inserts into table; values from lookup  ("William Leite Araújo" <william.bh@gmail.com>)
Список pgsql-general
Yes, I think that would work and mabye I'll use that approach. But is there
no way to implement as I orginally intended?

Also, am I right in thinking that this approach is more efficient than a
looping operation?


William Leite Araújo wrote:
>
>     Maybe you can use a "LEFT OUTER JOIN" ...
>
> CREATE or REPLACE FUNCTION "public"."tproc_handle_item_active"()
> RETURNS "pg_catalog"."trigger" AS
> $BODY$
> DECLARE
>        rec_item record;
>        int_org_id integer;
>
> BEGIN
>
>        -- whenever an item is set active; create entries in the following
> table:
>        -- t_koaitem
>
>        if new.item_active = true and old.item_active = false
>        then
>            select * into rec_item from t_item
>            where item_id = new.item_id;
>
>            int_org_id = rec_item.item_org_id;
>
>            insert into t_koaitem (koai_koa_id, koai_item_id,
> koai_item_locked, koai_user_idm)
>            SELECT t_koa.koa_id, t_item.item_id, false as lockstatus,
> t_item.item_user_idm
>            FROM t_item INNER JOIN t_koa ON t_item.item_org_id =
> t_koa.koa_org_id
>                      LEFT OUTER JOIN t_koaitem ON (koaitem_koa_id =
> t_koa.koa_id AND koaitem_item_id = t_item.item_id)
>            WHERE (((t_item.item_active)=True)
>                  AND ((t_koa.koa_koastatus_id)=2 Or
> (t_koa.koa_koastatus_id)=3)
>                  AND ((t_item.item_org_id)=int_org_id)
>                  AND (t_koaitem.koaitem_item_id IS NULL AND
> koaitem_item_id
> IS NULL)
>                          );
>        end if;
>        return null;
>
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
>
> 2007/5/21, novnov <novnovice@gmail.com>:
>>
>>
>> No and update would not be needed; but the capability would be close
>> enough,
>> I'd just skip the update, do nothing for that record.
>>
>> But from the sound of it, the example you're suggesting involves a loop
>> or
>> something of that order. I could have written this using a loop but
>> thought
>> a bulk operation that essentially worked like "insert new rows for the
>> set
>> and while doing so, silently skip inserts which would cause dupe key
>> violations". I explained all of this in the earlier messages. I thought
>> it
>> might be more effenient to handle without a loop. I've been able to do
>> this
>> kind of thing with other databases; essentially instruct the routine to
>> ignore errors silently, commit what it can commit.
>>
>>
>> Raymond O'Donnell wrote:
>> >
>> > On 21/05/2007 05:26, novnov wrote:
>> >
>> >> OK, but, how do I set this up to do what I need? I want an insert that
>> >> would
>> >> create a dupe key to be rolled back, and inserts that would not create
>> >> dupe
>> >> keys to be committed.
>> >
>> > Do you specifically need it in a trigger? I seem to recall an example
>> in
>> > the docs for pl/pgsql demonstrating a function to do something like
>> this
>> > - I think it tries an INSERT, and when a duplicate key raises an
>> > exception, it does an update instead. - You could easily adapt this to
>> > your purposes.
>> >
>> > Ray.
>> >
>> > ---------------------------------------------------------------
>> > Raymond O'Donnell, Director of Music, Galway Cathedral, Ireland
>> > rod@iol.ie
>> > ---------------------------------------------------------------
>> >
>> > ---------------------------(end of
>> broadcast)---------------------------
>> > TIP 2: Don't 'kill -9' the postmaster
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Trigger-function-which-inserts-into-table--values-from-lookup-tf3784731.html#a10720190
>> Sent from the PostgreSQL - general mailing list archive at Nabble.com.
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 4: Have you searched our list archives?
>>
>>                http://archives.postgresql.org/
>>
>
>
>
> --
> William Leite Araújo
> Analista de Banco de Dados - QualiConsult
>
>

--
View this message in context:
http://www.nabble.com/Trigger-function-which-inserts-into-table--values-from-lookup-tf3784731.html#a10721651
Sent from the PostgreSQL - general mailing list archive at Nabble.com.


В списке pgsql-general по дате отправления:

Предыдущее
От: David Fetter
Дата:
Сообщение: Re: [HACKERS] Role members
Следующее
От: Philippe Amelant
Дата:
Сообщение: Postgresql 8.2.4 crash with tsearch2