misc.log

日常茶飯事とお仕事と

PostgreSQLのbytea列にバイナリデータを突っ込む

結論。HEX化したデータをファイルとして取り込もうとしてもうまくいきません。権限が足りませんでした(そして権限を増やせる環境ではないので却下)。どうしたかというと、

  1. 事前にText型だけを持つ一時テーブルを用意する。
  2. Vimのxxdコマンドを使ってHEX化したファイルをメモ帳で開く。
  3. 巨大な「16進数文字の羅列」をコピペしてInsert文に書き、上記1のText型列を持つテーブルに突っ込む。
  4. 最終的にバイナリとして書きたいbytea型を持つテーブルに、InsertやUpdateで「decode(列名,'hex')」をかまして転記する

これでいけました。厳密にはxxdを通した時点で改行コード云々の問題が起きているかもしれませんが、とりあえず「バイナリ列を扱うツールのテスト」なので中身が壊れていようと関係ありません!(乱暴)。


SQLやPgAdminなどのツールだけで出来ないかと試してみたのはstackexchangeの下記のやりとり。残念ながら、Copyコマンドを使う段でsuperuserでないとできないというエラーが出ます(ERROR: must be superuser to COPY to or from a file)。

dba.stackexchange.com

xxdコマンドがWindowsで使えるか?という件は下記サイトでの回答を参考にしました(またしてもstack***系)。

superuser.com


入門vi 第6版

入門vi 第6版