「あなくつ」のおもちゃばこ

Blog

PostgreSQLのデータをMySQLへインポートする自分用メモ

PostgreSQLで運用していたデータをMySQLへ移行する必要が出てきてしまったので、少しでもラクに移行できないか考えてみた。

前提条件として

  • データ型は基本の型ばかり (INT/DOUBLE/CHAR/TEXTなど。DATETIMEなども使っていない)
  • 関数・変数は使わない (SERIAL(AUTO_INCREMENT)だけ)

というテーブル構成。

  1. まずダンプファイルを作る

    pg_dump --inserts --column-inserts -f /tmp/psql.sql [DB名]

  2. SQLファイル先頭のSETコマンドを削除

  3. ALTER TABLE [テーブル名] OWNER TO [ユーザー名] を削除

  4. CREATE SEQUENCE・・・ を削除

  5. ALTER SEQUENCE・・・ を削除

  6. ALTER TABLE ONLY・・・ を削除

  7. テーブル定義を置換

    • CHARACTER > CHAR (型の読み替え)
    • REAL > FLOAT (型の読み替え)
    • DOUBLE PRECISION > DOUBLE (型の読み替え)
    • TEXT DEFAULT ''::text > TEXT (TEXT型にデフォルト値を設定できない)
    • ''::bpchar > '' (デフォルト値の型明示を削除)
  8. データを置換

    • (\s+)' > ' (CHAR型だったカラムはパディングのスペース文字が入っているので削除。データ内のスペースを削除しないように注意)
  9. SERIAL型だったカラムに AUTO_INCREMENT 属性を付与

  10. SERIALの最大値を AUTO_INCREMENT の次の値へ変換 (テーブル名をうまく抜き出せるように正規表現を書いてね)

    検索正規表現: SELECT pg_catalog.setval\('(.+)_[^_]+_id_seq', (\d+), true\);

    置換正規表現: SET @num = \2+1; SET @sql=CONCAT('ALTER TABLE \1 AUTO_INCREMENT=',@num); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

  11. あとはエラーが出なくなるまでガンバレ!

タグ : MySQL,PostgreSQL,インポート,ダンプ

2015/08/24 16:23:44 | Trackbacks (0) | Comments (0) | Technology

  • Top
  • Software
  • Blog
  • Laboratory
  • Profile
Search
Feeds of Blog
Archives

Copyright © 2004-2024 Ana-Kutsu All Rights Reserved.