Du kan konvertere en hex-streng til bytea ved at bruge decode
funktion (hvor "kodning" betyder kodning af en binær værdi til en tekstværdi). For eksempel:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
hvilket er mere forståeligt med 9.0's standardoutput:
decode
------------
\xdeadbeef
Grunden til at du ikke bare kan sige E'\xDE\xAD\xBE\xEF'
er, at dette er beregnet til at lave en tekstværdi, ikke en bytea, så Postgresql vil forsøge at konvertere den fra klientkodningen til databasekodningen. Du kunne skrive bytea escape-formatet sådan, men du skal fordoble skråstregene:E'\\336\\255\\276\\357'::bytea
. Jeg tror, du kan se, hvorfor bytea-formatet bliver ændret.... IMHO decode()
funktion er en rimelig måde at skrive input på, selvom der er nogle overhead involveret.