Help us understand the problem. What is going on with this article?

【データ移行】HiRDB(BLOB型) → PostgreSQL(bytea型)

HiRDB上のテーブルにBLOB型のカラムが存在していて、データ移行でPostgreSQLへ移行したい状況になったので、
備忘録的に書き留めておく。


流れは下記の通り。

  1. 【HiRDB】BLOB型のカラム"以外"についてINSERT文を作成
  2. 【HiRDB】対象テーブルのPrimaryキーとBLOB型カラムだけをSELECTし、バイナリファイルを出力させる
  3. 【HiRDB → PostgreSQL】出力したバイナリファイルをPostgreSQLがインストールされているDBサーバーまでもっていく
  4. 【PostgreSQL】移動させてきたバイナリファイルをUPDATE文により、既存レコードに適用させる
  5. 【PostgreSQL】UPDATE文の実行

①【HiRDB】BLOB型のカラム"以外"についてINSERT文を作成

省略
尚、ここで作成したINSERT文はPostgreSQL側に適用した状態で、BLOB型カラム以外はデータが存在している状態にしておく。

②【HiRDB】対象テーブルのPrimaryキーとBLOB型カラムだけをSELECTし、バイナリファイルを出力させる

HiRDB側でWRITEという関数を用いてBLOB型カラムをSELECTすると、ドキュメントDirにバイナリファイルを出力してくれるらしい。
これによって、HiRDBのコンソールに出力されるのは、

PrimaryKey | それに対応したバイナリファイル名

となる。

sql
select [テーブルのPrimaryKey], WRITE([BLOB型のカラム名], '出力させたいDirのパス/ファイルの接頭辞(?)', 0) from テーブル名;

例)
・出力させたいDirのパス:/hirdb/doc
・ファイルの接頭辞:BLOBFILE
 出力させたいDirのパス/ファイルの接頭辞(?)
  ⇒/hirdb/doc/BLOBFILE

※出力させた2つの情報はファイル出力させたほうが後々楽になるのだが、ファイル出力の方法を知らなかったためこの方法で。

③【HiRDB → PostgreSQL】出力したバイナリファイルをPostgreSQLがインストールされているDBサーバーまでもっていく

バイナリファイルをどう移動させるかは環境によって異なるため、やり方は省略する。
今回はffftpで一旦ローカルにバイナリファイルを移動させて、ローカルのファイルをPostgreSQLのサーバーへ移動させるという二度手間Styleで移動させた。

※PostgreSQLサーバーへの移動先についてだが、PostgreSQLのドキュメントDir(?)の確認用SQLに記載しているSELECT文で確認できたファイルたちが存在しているフォルダに移動させる。
この作業を行わないと、下記の通りになって次のUPDATE文でコケる。
ERROR: ファイル"xxxxxxxxxxx"のstatに失敗しました: No such file or directory
        xxxxxxxxxxxはファイル名

PostgreSQLのドキュメントDir(?)の確認用SQL
select pg_ls_dir('.');

④【PostgreSQL】移動させてきたバイナリファイルをUPDATE文により、既存レコードに適用させる。

sql
UPDATE [対象テーブル名] SET [bytea型カラム名] = pg_read_binary_file('移動させてきたバイナリファイル名') WHERE PrimaryKey = '②で出力させた対応するPrimaryKey';

このUPDATE文をExcelでCONCATENATE関数を使って作成した。

⑤【PostgreSQL】UPDATE文の実行

以上。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした