Vous pouvez convertir une chaîne hexadécimale en bytea en utilisant le decode
fonction (où "encodage" signifie encoder une valeur binaire en une valeur textuelle). Par exemple :
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
ce qui est plus compréhensible avec la sortie par défaut de 9.0 :
decode
------------
\xdeadbeef
La raison pour laquelle vous ne pouvez pas simplement dire E'\xDE\xAD\xBE\xEF'
est que cela est destiné à faire une valeur de texte, pas un bytea, donc Postgresql essaiera de le convertir de l'encodage du client à l'encodage de la base de données. Vous pouvez écrire le format d'échappement bytea comme ça, mais vous devez doubler les antislash :E'\\336\\255\\276\\357'::bytea
. Je pense que vous pouvez voir pourquoi le format bytea est modifié... IMHO le decode()
La fonction est un moyen raisonnable d'écrire des entrées, même s'il y a une surcharge impliquée.