Published: 2021-07-25 10:40 +0900 by Chirimen
PostgreSQL のデータベースを MySQL (MariaDB) 用に変換しようとした。 変換ツールみたいなのが用意されているのかと思ったのだが、そうでもないみたい。 仕方がないので自力でなんとかした。
方針
PostgreSQL のデータベースをダンプすると SQL が列挙されたテキストが出力されるので、 これを MySQL 用に修正して、 MySQL (MariaDB) に入力として与えればよい。
文章で書くと単純だ。 ちょっと量が多いのが問題かな。
PostgreSQL データベースのダンプ
ダンプには pg_dump
を使う。
バックアップなら pg_dumpall
の方を使うことが多いかもしれないけど、
移行はデータベース単位で作業したほうが楽だと思う。
事実上、オプション --column-inserts
の指定は必須。
pg_dump
はデフォルトで COPY
コマンドを生成するが MySQL では使えない。
--column-inserts
を指定すると INSERT
コマンドを使うようになる。
ダンプされたファイルの修正
ダンプファイルは SQL のテキストなので基本的にはインポート可能だけれど、 PostgreSQL 固有の設定とか、 非互換な表現とかあるので事前に編集してく必要がある。
SET
文はすべて削除する。
というより、テーブル定義とデータ定義以外はすべて削除して構わない。
気になるようなら中身を確認して PostgreSQL と同等の機能が
MySQL MariaDB で提供されていないか確認するくらい。
SQL の非互換な表現部分は、 型とか制約とかそのあたりに多めな印象だっかけど、 あまり深く考えずに、try & error で何度も修正しながらインポートした。
制約の機能を有効にするには MySQL 側のデータベースエンジンを InnoDB にしておく必要がある。 当初のデフォルトが MyISAM になってて、 制約の設定はエラーなく通ったけど制約チェックがされていない状態になってしまっていた。