Re: Prevent characters not transposable to LATIN9

From: Arnaud Lesauvage <arnaud(dot)listes(at)codata(dot)eu>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Prevent characters not transposable to LATIN9
Date: 2010-07-02 06:10:40
Message-ID: 4C2D82E0.5020303@codata.eu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Wappler, Robert 2010-07-02 07:10:31 Re: Uncable to commit: transaction marked for rollback
Previous Message Dennis Gearon 2010-07-01 23:44:56 different language indexes