LoginSignup
2
2

More than 3 years have passed since last update.

RedmineのデータベースをMySQLからPostgreSQLへ移行した(補足)

Last updated at Posted at 2019-10-13

目的(+本記事の背景)

Redmine の Database を MySQL で運用していたのですが、
MySQL 5.6 以上や MariaDB には、 Redmine Issue #19344 , #19395 , #17460 という不具合があるのと、
これらのチケットが数年も放置されている状況を踏まえて、
PostgreSQL に移行することにしました。

幸いにも、Qiita の記事 『RedmineのデータベースをMySQLからPostgreSQLへ移行した』 に、
目的とする内容の手順が書かれていたので、
記事の著者に感謝しつつ、記事の内容どおりに行ったのですが、
wiki の履歴が移行できなかったので、
対策した結果を以下に記します。

謝辞

元記事 の ryouma_nagare さんには深く感謝申し上げます:bow_tone1:

内容

実施環境

  • OS: Ubuntu 18.04.03 LTS
  • Redmine: 3.4.6
  • Ruby 2.4.9
  • MySQL Server 5.7.27
  • PostgreSQL Server 10.10

元記事 と同様に、
同一ホストで MySQL -> PostgreSQL へ migration します。

手順

元記事 のとおりです。

本題:遭遇した不具合

元記事 のとおりに実行したら、
以下のエラーメッセージが表示され、wiki の履歴が移行できていませんでした。

error
org.embulk.exec.PartialExecutionException: java.lang.RuntimeException: org.postgresql.util.PSQLException: ERROR: invalid input syntax for type bytea
  場所: COPY wiki_content_versions_ ...

対策

元記事 の投稿者さんも留意点で書かれているように、
embulk は longblob や bytea などに対応していないので、
元記事 では、
wiki_content_versions テーブルの data カラム (MySQL では longblob型) を utf8 の string に変換し,
PostgreSQL に string 型 (PostgreSQLの wiki_content_versions テーブル内では bytea型) で
データをコピーしていましたが、
その部分を、以下のパッチのように変更しました。

%diff extra/wiki_content_versions.yml.liquid extra/wiki_content_versions.yml.liquid,orig
14c14
<            ,cast(data AS BINARY) as data
---
>            ,convert(data using utf8) as data
33c33
<     data: {value_type: byte}
---
>     data: {value_type: string}

この変更で、無事に履歴もコピーできました。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2