PostgreSQLのデータをMariaDB(MySQL)に移行する方法

最終更新日: 公開日: 2022年04月

あるプログラムのデータは Postgres で動かしていたのだが,他のサーバーからアクセスするとスピード的に問題があることが発覚したので,別のサーバーに移す必要が出てきた.
その際,PostgreSQL をインストールするのが面倒そうだったので,そのサーバーに既に存在している MariaDB(MySQL) に移すことにした.

たいしたテーブルでもないので,ほとんど同じだと思っていたら,少しだけ面倒だったので備忘録がてら書いておく.

Postgres からのデータのダンプ(抜き出し)

特に理由はないが,分かりやすいのでスキーマとデータと分けておく.

まず定義(スキーマ)だけ取り出す.

pg_dump --schema-only --no-owner --no-privileges --disable-dollar-quoting -U ユーザ名 -p ポート番号 -h Postgresデータベースが動作しているサーバー名 Postgresデータベース名 > dump_schema.sql

データを取りだすが --inserts を入れておく.そうすると COPY でなく,INSERT を使ったダンプをしてくれる.

pg_dump --inserts --data-only --no-owner --no-privileges --disable-dollar-quoting -U ユーザ名 -p ポート番号 -h Postgresデータベースが動作しているサーバー名 Postgresデータベース名 > dump_data.sql

ダンプデータの加工

MySQL で読み込めるようにデータを加工する.

スキーマ(データ定義)

  • SET 文を削除
  • ALTER TABLE ONLY … のONLYを削除

シーケンスを使っている場合はさらに注意が必要だ.
例えば,以下のようなテーブル定義があったとしよう.

CREATE TABLE sample (
    inno integer NOT NULL,
    sttext text
);
CREATE SEQUENCE sample_inno_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
ALTER SEQUENCE sample_inno_seq OWNED BY sample.inno;
ALTER TABLE ONLY sample ALTER COLUMN inno SET DEFAULT nextval('sample_inno_seq'::regclass);

このまま,MySQL に流し込むとエラーになるので,例えば以下のように変更する.(dump_schema.sql)

CREATE SEQUENCE sample_inno_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
CREATE TABLE sample (
    inno int NOT NULL DEFAULT nextval(sample_inno_seq),
    sttext text,
);

MySQLへの流し込みは以下のようになる.

mysql -u ユーザー名 -h MariaDBデータベースホスト名 -p -D MariaDBデータベース名 < dump_schema.sql

データ

シーケンスに関する以下のような初期値の行は削除しておく.(dump_data.sql)

SELECT pg_catalog.setval('sample_inno_seq', 現在の値, true);

MySQLへの流し込みは以下のようになる.

mysql -u ユーザー名 -h MariaDBデータベースホスト名 -p -D MariaDBデータベース名 < dump_data.sql

現在の値を初期値として代入しておく.

ALTER SEQUENCE sample_inno_seq RESTART 現在の値;

ごく簡単なテーブルやシーケンスの場合はこのぐらいでデータ移行はなんとかなった.

 

Contact

ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.

 
   
Chrome 拡張機能 PageSpeed Insights SEO WordPress Youtube お問い合わせフォーム アナリティクス アンケートフォーム サーチコンソール セミナー タグマネージャー データベース ヒアリング プラグイン ページ閲覧解析 マーケティング メール配信 リッチリザルト レスポンシブ対応 ログ解析 勉強会 商品企画 営業 営業力 営業支援システム 実装 検索順位 検索順位チェックツール 追跡 開発者ツール
contact
Pagetop