Você pode converter uma string hexadecimal em bytea usando o
decode
função (onde "codificação" significa codificar um valor binário para algum valor textual). Por exemplo:select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
o que é mais compreensível com a saída padrão do 9.0:
decode
------------
\xdeadbeef
O motivo pelo qual você não pode simplesmente dizer
E'\xDE\xAD\xBE\xEF'
é que isso se destina a criar um valor de texto, não um bytea, então o Postgresql tentará convertê-lo da codificação do cliente para a codificação do banco de dados. Você pode escrever o formato de escape bytea assim, mas precisa dobrar as barras invertidas:E'\\336\\255\\276\\357'::bytea
. Eu acho que você pode ver porque o formato bytea está sendo alterado.... IMHO o decode()
função é uma maneira razoável de escrever entradas, mesmo que haja alguma sobrecarga envolvida.