【数据迁移】将 HiRDB(BLOB 类型)迁移到 PostgreSQL(bytea 类型)
由于在HiRDB上存在一个BLOB类型的列,现在需要将数据迁移到PostgreSQL,因此我将其记录下来作为备忘录。
流程如下所示。
-
- 【HiRDB】请创建一个INSERT语句,其中不包括”BLOB”类型的列。
-
- 【HiRDB】仅选择目标表的主键和BLOB类型列,将其导出为二进制文件。
-
- 【HiRDB → PostgreSQL】将导出的二进制文件传输到安装有PostgreSQL的数据库服务器上。
-
- 【PostgreSQL】通过UPDATE语句将移动的二进制文件应用于现有记录。
- 【PostgreSQL】执行UPDATE语句。
①【HiRDB】创建INSERT语句时,只需排除BLOB类型的列。
在应用INSERT语句到PostgreSQL之前,保留此处所创建的INSERT语句,并确保除了BLOB类型列之外,其他数据都已存在。
仅选择目标表的主键和BLOB类型字段,并将其导出为二进制文件。
使用HiRDB的WRITE函数来SELECT BLOB类型列,可以将二进制文件输出到文档目录中。
因此,在HiRDB的控制台上输出的是二进制文件。
主键 | 对应的二进制文件名
成为这样。
select [テーブルのPrimaryKey], WRITE([BLOB型のカラム名], '出力させたいDirのパス/ファイルの接頭辞(?)', 0) from テーブル名;
・要输出的目录路径:/hirdb/doc
・文件前缀:BLOBFILE
输出的目录路径/文件前缀(?)
⇒/hirdb/doc/BLOBFILE
※输出的两个信息最好保存到文件中,这样后面会更方便,但由于不知道文件输出的方法,所以采用了这种方法。
把HiRDB转换为PostgreSQL后的输出二进制文件传送到已安装PostgreSQL的数据库服务器上。
由于环境的不同,如何移动二进制文件会有所差异,因此省略具体方法。
这次我使用ffftp将二进制文件先移动到本地,然后再将本地文件移动到PostgreSQL服务器,这样做算是多此一举。
※关于迁移到PostgreSQL服务器的目标位置,需要移动到包含通过确认用于检查PostgreSQL文档目录的SELECT语句检索到的文件的文件夹中。
如果不执行此操作,则会导致下面的错误,在下一条UPDATE语句中失败。
错误:无法对文件”xxxxxxxxxxx”进行stat统计:没有此文件或目录
xxxxxxxxxxx为文件名。
select pg_ls_dir('.');
通过UPDATE语句将移动过来的二进制文件应用到现有记录中的PostgreSQL。
UPDATE [対象テーブル名] SET [bytea型カラム名] = pg_read_binary_file('移動させてきたバイナリファイル名') WHERE PrimaryKey名 = '②で出力させた対応するPrimaryKey';
我使用Excel的CONCATENATE函数创建了这个UPDATE语句。
⑤【PostgreSQL】执行UPDATE语句
直上云霄。