web-dev-qa-db-ja.com

PostgreSQLで16進数リテラルを書き込むにはどうすればよいですか?

PostgreSQLで16進数リテラルをどのように記述しますか?欲しい0xCC、 私が行った場合;

SELECT 0xCC;
 xcc 
-----
   0
(1 row)

したがって、PostgreSQLはxccをエイリアスとして解析しています。

3
Evan Carroll

任意のデータ/整数(int

ビット文字列定数 を使用して、16進バイトを書き込むことができます。

SELECT x'CC';  -- same as b'11001100'

これは基本的にbit x'CC'が返す Bit String Type と同じですが、intに使用できるキャストがあるため、x'CC'::int * 5を実行できます

UTF-8バイトシーケンス

バイトシーケンスが有効なUTF-8文字の場合、 E''にバックスラッシュエスケープシーケンスを付けて単一バックスラッシュ\

SELECT E'\x41';
 ?column? 
----------
 A
(1 row)

シーケンスが無効な場合、エラーが発生します

# SELECT E'\xCC';
ERROR:  invalid byte sequence for encoding "UTF8": 0xcc

bytea -固有。

PostgreSQLには、任意のバイトを許可する可変長のバイナリデータ型があります。このタイプは bytea と呼ばれます。 bytea hex format を使用して、このフォーマットに移行できます。これでは、次のいずれかを使用します。

  • ダブルバックスラッシュ\\を使用します
  • 16進表記からbyteaへのキャストを使用します。

ここに両方の​​構文があります、

SELECT bytea E'\\xDEADBEEF', bytea '\xDEADBEEF';
   bytea    |   bytea    
------------+------------
 \xdeadbeef | \xdeadbeef
(1 row)

大量の保管

byteaとして保存するのではなく、大きな数値のみを保存する必要がある場合は、Big-Numbersのopenssl実装を使用してそれらを保存する pg_bignum を確認します。

4
Evan Carroll