| 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: | Whole Thread | Raw Message | 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 |