U kunt een hexadecimale tekenreeks naar bytea converteren met behulp van de decode
functie (waar "codering" betekent het coderen van een binaire waarde naar een tekstuele waarde). Bijvoorbeeld:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
wat begrijpelijker is met de standaarduitvoer van 9.0:
decode
------------
\xdeadbeef
De reden waarom je niet gewoon E'\xDE\xAD\xBE\xEF'
kunt zeggen is dat dit bedoeld is om een tekstwaarde te maken, niet een bytea, dus Postgresql zal proberen deze te converteren van de clientcodering naar de databasecodering. Je zou het bytea escape-formaat zo kunnen schrijven, maar je moet de backslashes verdubbelen:E'\\336\\255\\276\\357'::bytea
. Ik denk dat je kunt zien waarom het bytea-formaat wordt gewijzigd.... IMHO de decode()
functie is een redelijke manier om invoer te schrijven, ook al komt er wat overhead bij kijken.