【数据迁移】将 HiRDB(BLOB 类型)迁移到 PostgreSQL(bytea 类型)

由于在HiRDB上存在一个BLOB类型的列,现在需要将数据迁移到PostgreSQL,因此我将其记录下来作为备忘录。

流程如下所示。

    1. 【HiRDB】请创建一个INSERT语句,其中不包括”BLOB”类型的列。

 

    1. 【HiRDB】仅选择目标表的主键和BLOB类型列,将其导出为二进制文件。

 

    1. 【HiRDB → PostgreSQL】将导出的二进制文件传输到安装有PostgreSQL的数据库服务器上。

 

    1. 【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语句

直上云霄。

bannerAds