decode
を使用して、16進文字列をbyteaに変換できます。 関数(「エンコード」とは、バイナリ値をテキスト値にエンコードすることを意味します)。例:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
これは、9.0のデフォルト出力でより理解しやすくなります:
decode
------------
\xdeadbeef
E'\xDE\xAD\xBE\xEF'
とだけ言えない理由 これは、byteaではなくテキスト値を作成することを目的としているため、Postgresqlはそれをクライアントエンコーディングからデータベースエンコーディングに変換しようとします。このようにbyteaエスケープ形式を記述できますが、円記号を2倍にする必要があります:E'\\336\\255\\276\\357'::bytea
。 bytea形式が変更されている理由がわかると思います。decode()
の私見 関数は、いくらかのオーバーヘッドが含まれていても、入力を書き込むための合理的な方法です。