Thread: Exception handling from trigger

Exception handling from trigger

From
Vlad Dimitriu
Date:
Hello,

I would like to handle the exceptions that a database returns. For example,
if a "mycolumn" column is defined as varchar(64), I'd like to catch
if the new.mycolumn is larger than 64 with my own trigger
(for cutoms, internationalized messages, etc ..). So I did,
but the database catch this error before my 'before insert'-trigger
(using character_length(new.mycolumn) ...).

Is this way of handling exceptions possible in postgres ?
If so, what is the normal way to handle this exceptions, from a
plpgsql/trigger(rule??) perspective ?


Thank you ...


Vlad Dimitriu



Re: Exception handling from trigger

From
Rod Taylor
Date:
> Is this way of handling exceptions possible in postgres ?
> If so, what is the normal way to handle this exceptions, from a
> plpgsql/trigger(rule??) perspective ?

8.0 should allow you to do this. 7.4 you need to perform your own checks
and catch whether they succeed or fail.




Re: Exception handling from trigger

From
Tom Lane
Date:
Vlad Dimitriu <vlad.dimitriu@base.ro> writes:
> I would like to handle the exceptions that a database returns. For example,
> if a "mycolumn" column is defined as varchar(64), I'd like to catch
> if the new.mycolumn is larger than 64 with my own trigger

You can't.  From a logical perspective this is sensible, because the
trigger is handed data already formed into a tuple.  If the presented
tuple contained a mycolumn value wider than 64 characters then it would
not be a legal value of the rowtype (any more than if, say, the column
value were an integer and not a varchar at all).

What I'd suggest if you want this is to remove the datatype restriction
and instead rely on your trigger to enforce the limitation.
        regards, tom lane


Re: Exception handling from trigger

From
Vlad Dimitriu
Date:
Tom Lane wrote:

>You can't.  From a logical perspective this is sensible, because the
>trigger is handed data already formed into a tuple.  If the presented
>tuple contained a mycolumn value wider than 64 characters then it would
>not be a legal value of the rowtype (any more than if, say, the column
>value were an integer and not a varchar at all).
>
>What I'd suggest if you want this is to remove the datatype restriction
>and instead rely on your trigger to enforce the limitation.
>
>  
>
I just realised that. I would design those columns as text
and enforce value length restrictions with triggers.

It's a false problem:  I define the data type for a field and
want to check his value after the exception that I can't fit
larger data into my field.

Thank you, Rod, Tom ....


Re: Exception handling from trigger

From
Vlad Dimitriu
Date:

I would design those columns as text
and enforce value length restrictions with triggers.

It's a false problem:  I define the data type for a field and
want to check his value after the exception that I can't fit
larger data into my field.

Thank you, Rod, Tom ....