From: | Vlad Romascanu <vromascanu(at)accurev(dot)com> |
---|---|
To: | Bruce Momjian <bruce(at)momjian(dot)us> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: converting E'C:\\something' to bytea |
Date: | 2011-03-16 16:09:08 |
Message-ID: | AANLkTi=qB0CQBboJ9=ZR6VWNMRcENy_skK_L7PvQySSi@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi, Bruce,
Yes, I essentially want to reinterpret text as bytea without any
conversion or actual backslash logic coming in the process, in the
same way pg_convert_from internally reinterprets the bytea return
value from pg_convert as text without any additional logic. I.e.
given the text field 'C:\some\dir' (E'C:\\some\\dir') which is 11
codepoints long and contains a grand total of two backslashes, I want
those two backslashes to map to two byte values 0x5c in a
corresponding 11-byte long bytea. :)
I tried to achieve this zero-logic via CREATE DOMAIN ... WITHOUT
FUNCTION and casting via the domain, assuming the lot would then
behave like the aforementioned trick in the pg_convert_from
implementation, but it doesn't seem to work that way. :(
V.
On Wed, Mar 16, 2011 at 11:51 AM, Bruce Momjian <bruce(at)momjian(dot)us> wrote:
> Vlad Romascanu wrote:
>> Hello,
>>
>> Is there any way of casting (reinterpreting) a varchar/text field
>> containing arbitrary backslashes to bytea without making an escaped
>> copy of the varchar/text first? In the examples below I am using a
>> constant E'...' for clarity, the value normally comes from a
>> varchar/text column in a table but the end behaviour is the same.
>>
>> E.g.:
>>
>> 1) SELECT E'C:\\something'::bytea
>> ERROR: invalid input syntax for type bytea
>> --> essentially like calling decode(); bad in this case because of
>> the naked backslash!
>>
>> 2) SELECT replace(E'C:\\something', E'\\', E'\\\\')::bytea
>> --> works OK, but bad performance-wise because needed to make an
>> escaped copy of the string which is inefficient
>>
>> 3) CREATE DOMAIN my_varlena AS text;
>> CREATE CAST (my_varlena AS bytea) WITHOUT FUNCTION;
>> SELECT E'C:\\something'::my_varlena::bytea
>> ERROR: invalid input syntax for type bytea
>> --> WHY?
>
> Well, the '\\' is being converted to '\' because of the single-quotes,
> and then bytea is saying it doesn't know how to process \something. It
> sounds like you want bytea but don't want the ability to use backslash
> escapes to input the bytea values. I am unsure how to accomplish that.
>
> --
> Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
> EnterpriseDB http://enterprisedb.com
>
> + It's impossible for everything to be true. +
>
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2011-03-16 16:10:57 | Re: converting E'C:\\something' to bytea |
Previous Message | Bruce Momjian | 2011-03-16 15:51:46 | Re: converting E'C:\\something' to bytea |