Puoi convertire una stringa esadecimale in byte usando il decode
funzione (dove "codifica" significa codificare un valore binario in un valore testuale). Ad esempio:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
che è più comprensibile con l'output predefinito di 9.0:
decode
------------
\xdeadbeef
Il motivo per cui non puoi semplicemente dire E'\xDE\xAD\xBE\xEF'
è che questo ha lo scopo di creare un valore di testo, non un byte, quindi Postgresql proverà a convertirlo dalla codifica del client alla codifica del database. Potresti scrivere il formato di escape bytea in questo modo, ma devi raddoppiare le barre rovesciate:E'\\336\\255\\276\\357'::bytea
. Penso che tu possa capire perché il formato bytea viene cambiato.... IMHO il decode()
La funzione è un modo ragionevole per scrivere input, anche se è coinvolto un sovraccarico.