Triggers

Поиск
Список
Период
Сортировка
От Ben Clewett
Тема Triggers
Дата
Msg-id 3E9AE2D1.4010709@roadrunner.uk.com
обсуждение исходный текст
Ответ на Re: search_path in SQL script?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-novice
Hi.  I'm fruitlessly banging my head against a trigger.  Which is
causing an 'update' to fail.  Which is not my aim.  There is nothing
obvious wrong, but maybe a member of this group can see something I cannot.

It does not return any error, and replies on the command line with the
usual:

=# UPDATE 1

Yet no update has taken place.  Something about my trigger is messing it up.

My aim is to update my relation 'orders' with a summary of it's child
relation 'item'.

Brefly (and in lower case, sorry):

create table orders (
    code serial8 not null primary key,
    sum_items smallint not null default 0,    -- Summary field
) ;

create table item (
    orders integer not null,
    descript varchar(50) not null default '',
    primary key (orders, descript),
    foreign key (orders) references orders (code) on delete cascade,
    items smallint not null default 0,    -- Source field
) ;


CREATE FUNCTION t_dec_item_summary ()
RETURNS trigger
AS '
   BEGIN
     update orders set
       item_count = item_count - 1
     WHERE code = OLD.orders;
     RETURN OLD;
   END;
' language 'plpgsql';


create trigger item_00_change
   before delete or update
   on item for each row
   execute procedure t_dec_item_summary ();


Example:

=# select orders, descript, items from item ;
1 1 1

=# update item set items = 2 where orders = 1 and descript = '1' ;
UPDATE 1

=# select orders, descript, items from item ;
1 1 1

Therefore, no difference.  The command appears to have failed.

Drop the trigger:

=# drop trigger item_00_change ;

=# update item set items = 2 where orders = 1 and descript = '1' ;
UPDATE 1

=# select orders, descript, items from item ;
1 1 2

And it will work.  It will also completelly works on 'delete', which
calls the same trigger.

I do know with certainty that the trigger has fired.


What is there about my trigger is causing the command to fail without
reporting an error?


Something about my function t_dec_item_summary is causing the UPDATE to
fail to update the values, or update with the same values as already
existed.


Am I returning the correct thing?  Should I force a return of 'TRUE' or
'FALSE' or something?


Ever thankful of amazing help from this group,

Ben


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

Предыдущее
От: Adam Witney
Дата:
Сообщение: Re: What version am I running?
Следующее
От: nolan@celery.tssi.com
Дата:
Сообщение: Triggers