Re: problem with sequence number using a trigger

From: Lennin Caro <lennin(dot)caro(at)yahoo(dot)com>
To: pgsql-novice(at)postgresql(dot)org, MITCHELL CIFUENTES <mitchell(dot)cifuentes(at)gmail(dot)com>
Subject: Re: problem with sequence number using a trigger
Date: 2009-06-18 15:10:53
Message-ID: 134500.82398.qm@web59510.mail.ac4.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice


From: MITCHELL CIFUENTES <mitchell(dot)cifuentes(at)gmail(dot)com>
> Subject: [NOVICE] problem with sequence number using a trigger
> To: pgsql-novice(at)postgresql(dot)org
> Date: Wednesday, June 17, 2009, 9:07 PM
> Hello,
>
> I hope you can help with this. I have a BEFORE trigger that
> run every time an event insert o update occurs
> on a table called stock. It is working fine inserting the
> correct data on the table if the conditions are met,
>
> and inserting nothing if not.
> The problem is when it rejects the insert statement, the
> sequence number stock_id gets incremented
> even though nothing is inserted on the table. What can i do
> to stop stock_id from incrementing??.
>
>
> Mitchell
>
> p.d. This is the code.
>
> create function serie_trigger() returns trigger AS $$
> declare
>     pro_record    record;
> begin
>     select * into pro_record from producto
>     where producto_id = new.producto_id;
>
>     if (pro_record.seriado = true)
>     then
>         if (new.serie IS NOT NULL)
>         then
>             if (new.cantidad = 1)
>             then
>                 return new; -- new se usa como
> fuente para insert
>
>             else
>                 raise notice 'ERROR:
> Candidad debe ser 1, las series se pueden insertar solo una
> a la vez';
>                 return NULL;
>             end if;
>         else
>             raise notice 'ERROR: Debe ingresar
> una serie, el producto es seriado';
>
>             return NULL;
>         end if;           
>     else
>         if (new.serie IS NULL)
>         then
>             return new; -- new se usa como fuente
> para insert
>         else
>             raise notice 'ERROR: El producto
> es no seriado, no corresponde ingresar serie.';
>
>             return NULL;
>         end if;
>     end if;
> end;
> $$ language plpgsql;
>
>
>
>

when you try to insert data to a table whit serial the system take the next value and reserve this.

Browse pgsql-novice by date

  From Date Subject
Next Message Mike 2009-06-18 17:51:39 How to insert data from a text file
Previous Message Sean Davis 2009-06-18 12:00:08 Re: UUID, performance of primary keys