Du kan konvertera en hexadecimal sträng till bytea med decode
funktion (där "kodning" betyder kodning av ett binärt värde till något textvärde). Till exempel:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
vilket är mer förståeligt med 9.0:s standardutgång:
decode
------------
\xdeadbeef
Anledningen till att du inte bara kan säga E'\xDE\xAD\xBE\xEF'
är att detta är avsett att göra ett textvärde, inte en bytea, så Postgresql kommer att försöka konvertera det från klientkodningen till databaskodningen. Du kan skriva bytea escape-formatet så, men du måste dubbla snedstreck:E'\\336\\255\\276\\357'::bytea
. Jag tror att du kan se varför byte-formatet ändras.... IMHO decode()
funktion är ett rimligt sätt att skriva indata, även om det finns en del overhead.