Re: Catching errors inside a function

From: Francesco Casadei <f_casadei(at)libero(dot)it>
To: Jeff Eckermann <jeckermann(at)verio(dot)net>
Cc: Francesco Casadei <f_casadei(at)libero(dot)it>, pgsql-general(at)postgresql(dot)org
Subject: Re: Catching errors inside a function
Date: 2001-09-04 17:57:50
Message-ID: 20010904195750.A3650@goku.kasby
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, Sep 04, 2001 at 11:38:09AM -0500, Jeff Eckermann wrote:
> Why not just do a SELECT to check for existence of the proposed insert
> value, and go ahead only if NOT FOUND?
>
> ----- Original Message -----
> From: "Francesco Casadei" <f_casadei(at)libero(dot)it>
> To: <pgsql-general(at)postgresql(dot)org>
> Sent: Monday, September 03, 2001 1:07 PM
> Subject: [GENERAL] Catching errors inside a function
>
>
> > I want to execute an INSERT query that may fail due to a primary key
> constraint
> > check. The primary key is on a field whose value is generated randomly by
> > another C function.
> > Is it possible to wrap the insert into a function that checks for failures
> and
> > retry the insert until success? Something like this:
> >
> > function blah
> > {
> > do {
> > cod = generate code;
> > execute insert with cod as primary key;
> > } while (! errors);
> > }
> >
> > I tried with SQL, PL/pgSQL and C functions but the backend aborts the
> > transaction and stops execution of the function as soon as the error is
> thrown.
> > Is there a way to disable this behaviour?
> >
> > Thanks in advance for your help.
> >
> > Francesco Casadei
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 1: subscribe and unsubscribe commands go to majordomo(at)postgresql(dot)org
> >
> >
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
>
> end of the original message

The table will likely have about 80000-100000 records. A select, an insert and
the mandatory constraint check are a lot of work for just inserting a new row!!
The previous version of the function that generates the code worked this way
(with a SELECT assuring uniqueness of the code), but it was to slow.

Francesco Casadei

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Francesco Casadei 2001-09-04 18:03:08 Re: Catching errors inside a function
Previous Message Stephan Szabo 2001-09-04 17:49:08 Re: FOREIGN KEY: difference between NOT DEFERRABLE and