PostgreSQLにおいてbytea型のデータをテキストで取得するときの話。
過去に調べた結果としてずっとencode()を利用していたのですが、この関数はbase64/escape/hexとして表示することしかできないため、日本語が含まれているたびに困っていました。どうしてもSQLだけで日本語を扱いたいことがあり調べていたら、convert_from()を利用すればいいということで、試したところすんなりと取得できました。
select convert_from(bdata, 'utf8') from test_table;
公式ヘルプにもきちんと書かれていて、以下のページの「表9.13 テキスト/バイナリ文字列変換関数」としてまとめられていました。
PostgreSQL 17 - 9.5. バイナリ文字列関数と演算子
https://www.postgresql.jp/document/17/html/functions-binarystring.html
以前は「9.5. バイナリ文字列関数と演算子」内にconvert_from()やconvert_to()の説明はなく、これらは一つ前の「9.4. 文字列関数と演算子」に書かれていました。確認すると9.13から今のような構成になったようで、これだとすぐに見つけられます。なお、convert_from()は少なくとも8.3のヘルプには記載されており、、2008年にはもう存在していたようですから、反省したことは言うまでもありません。恥ずかしい限りです。