Re: Prevent characters not transposable to LATIN9 - Mailing list pgsql-general

From Arnaud Lesauvage
Subject Re: Prevent characters not transposable to LATIN9
Date
Msg-id 4C2D82E0.5020303@codata.eu
Whole thread Raw
In response to Re: Prevent characters not transposable to LATIN9  (Sam Mason <sam@samason.me.uk>)
List pgsql-general
Le 1/07/2010 17:12, Sam Mason a écrit :
> On Thu, Jul 01, 2010 at 04:53:51PM +0200, Arnaud Lesauvage wrote:
>>  Le 1/07/2010 16:48, Sam Mason a écrit :
>>>  How about using the built in character conversion routines.  Something
>>>  like:
>>>
>>>     col = convert_from(convert_to(col, 'LATIN9'),'LATIN9')
>>>
>>>  as the check constraint, or its inverse as the where clause for the
>>>  erroneous rows?
>>
>>  What happens then for a character that does not have an equivalent in
>>  LATIN9 ?
>>  If an error is raised in the check constraint, does it look like a
>>  normal check error ?
>
> Yoik, didn't think about how it would actually handle the conversion!
> It appears to throw an exception, so you probably want to bundle it up
> in a pl/pgsql function that catches it and does the "right thing" for
> you.  Maybe something like:
>
>    CREATE FUNCTION isstringrepresentable(str TEXT, charset TEXT) RETURNS BOOLEAN AS $$
>      BEGIN
>        RETURN str = convert_from(convert_to(str, charset),charset);
>      EXCEPTION WHEN OTHERS THEN
>        RETURN FALSE;
>      END
>    $$ LANGUAGE plpgsql IMMUTABLE;

Yep, I'll give it a try as soon as I find some time !

Thanks for the hint.

pgsql-general by date:

Previous
From: Stephen Denne
Date:
Subject: Help with pgAndroid Contest
Next
From: "Wappler, Robert"
Date:
Subject: Re: Uncable to commit: transaction marked for rollback