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.
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 |