5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DBeaverを使ってPostgreSQLからMySQLにDB移行するver.2

Last updated at Posted at 2021-02-08

mysqlworkbanchを使った方法や、PostgreSQLのdumpファイルを手修正してmysqlにインポートする方法などがあるようですが、上手くいかなかったため、最終的にDBeaverを使ってDB移行する事ができました。

日本語情報にうまくたどりつかなかったので、ざっくりですが記事化しました。

また以前の方法(dbeaverでデータ移行&mysqlにテーブル自動作成)では、インデックスやカラムコメントが移行できてなかったので、手順見直しました。

環境

  • local環境 mariadb(mysql) xampp, PostgreSQL
  • dbeaverでDB移行

前提

  • windows
    • xamppインストール済み
    • PostgreSQLインストール済み
    • dbeaverインストール済み
      • dbeaverからxamppのmariadb, localのPostgreSQLに接続済み

※ おそらくdbeaverから接続できれば、PostgreSQLはlocalでも外部サーバでも移行できると思います。

手順

PostgreSQLへインポート

windows(SQL Shell (psql))の場合

\i 'C:\\path_to_folder\\dumpfile.dump'

Linuxの場合

# su - postgres

// インポート
-bash-4.2$ psql < dumpfile.dump

dbeaverでDB移行

PostgreSQL のDBテーブルのDDLを取得

  • dbeaverでpostgress に接続
    • 対象テーブルを全選択>右クリック>Generate SQL>DDL を選択
    • image.png
      • 下部のSettingの■ Use fully qualified names ■ Compact SQL ■ Show commentsをチェックONして「Copy」ボタン押下
      • image.png
      • ※ 実際はSQL PreviewにDDL文が表示されます。

DDLをMySQL用に変換する

コピーしたDDLをメモ帳に貼り付けして編集する

PostgreSQL
CREATE TABLE public.table_name (
	colum_id1 varchar NOT NULL, -- カラム1
	colum_id2 varchar NULL, -- カラム2
	age int4 NULL, -- 年
	CONSTRAINT table_name_key PRIMARY KEY (colum_id1)
);
COMMENT ON TABLE public.table_name IS 'テーブル名';

-- Column comments

COMMENT ON COLUMN public.t_person.colum_id1 IS 'カラム1';
COMMENT ON COLUMN public.t_person.colum_id2 IS 'カラム2';
COMMENT ON COLUMN public.t_person.age IS '年';

MySQL
CREATE TABLE mysql_dbname.table_name (
	colum_id1 varchar(255) NOT NULL COMMENT 'カラム1',
	colum_id2 varchar(255) NULL COMMENT 'カラム2',
	age int4 NULL COMMENT '年',
	CONSTRAINT table_name_key PRIMARY KEY (colum_id1)
) COMMENT 'テーブル名';
  • varchar ⇒ varchar(255) に置換
    • ポスグレはvarchar引数なしで1GBまで可。mysqlは64KBまでで引数なしダメ。DBの中身みてたいして文字列なかったため、255文字までで設定
  • テーブルコメントは、CREATE文末尾に) COMMENT 'テーブル名';に記述
  • カラムコメントは、カラム末尾に移動(テキストエディタの置換を使うと早い)
    • , -- COMMENT 'に置換
    • \r\n正規表現ON ⇒',にして必要なところを置換
  • COMMENT ON TABLE COMMENT ON COLUMNは削除
  • public.mysql_dbname.(移行先のMySQLのDB名)に置換

このCREATE文をMysqlに流すと、テーブル構造、インデックス、外部インデックス、コメントが移行できます。

データをMySQL用に移行する

  • dbeaverでpostgress に接続
    • 対象テーブルを全選択>右クリック>Export Data
    • image.png
      • Databaseを選択>Nextボタン押下
      • image.png
      • 右上フォルダボタン押下
      • image.png
        • 移行先のスキーマ選択
        • image.png
      • Mapping列がexistingになっている事を確認して「Next」ボタン押下
      • image.png
      • 変更せず「Next」ボタン押下
      • image.png
      • 「Start」ボタン押下 でデータ移行始まる
      • image.png

外部キー制約により、移行エラーが出る事があります。
その時は、
 1. マスタ系テーブルのみ選択して再度データ移行
 2. 外部キーのあるデータ系テーブルのみ選択して、再度データ移行
すれば移行できます。

参考URL

postgresql 文字型

character varying(n), varchar(n) 上限付き可変長
text 制限なし可変長
(省略)
character varyingが長さ指定なしで使われた時は、いかなる長さの文字列でも受け付けます。

MySQLとPostgresのデータ型対応表 - Qiita

5
6
0

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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?