Можете да конвертирате шестнадесетичен низ в байт, като използвате decode
функция (където "кодиране" означава кодиране на двоична стойност към някаква текстова стойност). Например:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
което е по-разбираемо с изхода по подразбиране на 9.0:
decode
------------
\xdeadbeef
Причината, поради която не можете просто да кажете E'\xDE\xAD\xBE\xEF'
е, че това е предназначено да направи текстова стойност, а не байт, така че Postgresql ще се опита да го преобразува от клиентското кодиране в кодирането на базата данни. Можете да напишете escape формат на bytea по този начин, но трябва да удвоите обратната наклонена черта:E'\\336\\255\\276\\357'::bytea
. Мисля, че можете да видите защо форматът на bytea се променя.... IMHO decode()
функцията е разумен начин за записване на входове, въпреки че има някои допълнителни разходи.