Hexadecimální řetězec můžete převést na bajt pomocí decode
funkce (kde "kódování" znamená kódování binární hodnoty na nějakou textovou hodnotu). Například:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
což je srozumitelnější s výchozím výstupem 9.0:
decode
------------
\xdeadbeef
Důvod, proč nemůžete jednoduše říct E'\xDE\xAD\xBE\xEF'
je, že toto je určeno k vytvoření textové hodnoty, nikoli bajtu, takže Postgresql se ji pokusí převést z kódování klienta do kódování databáze. Dalo by se napsat bajtový escape formát takto, ale musíte zdvojnásobit zpětná lomítka:E'\\336\\255\\276\\357'::bytea
. Myslím, že vidíte, proč se formát bytea mění... IMHO decode()
funkce je rozumný způsob zápisu vstupů, i když s tím souvisí určitá režie.