PostgreSQL のデータベースを MySQL (MariaDB) に変換する

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 になってて、 制約の設定はエラーなく通ったけど制約チェックがされていない状態になってしまっていた。

Share

Latest Posts

QNAP の Docker を使ってみる
QNAP の Docker を使ってみる

QNAP で Docker が使用できるようなので使ってみた。 Docker Hub のイメージも利用できるし、 試してはいないが docker compose も使えるようなので、 思ったより柔軟性の高い運用ができそうだ。

UNIX系OS (NetBSD) での Ghostscript 7.07 のコンパイル
UNIX系OS (NetBSD) での Ghostscript 7.07 のコンパイル

UNIX系 (NetBSD) で Ghostscript 7.07 をソースからコンパイルしてインストールし、 日本語フォントを利用できるようにするまでの手順のまとめ。

Windows 用 Ghostscript 7.07 の環境設定

Windows で Ghostscript 7.07 をインストールして日本語を表示させるための環境を構築する手順のまとめ。 ファイルの入手方法から設定、動作確認まで。