Submit Search
MySQLからPostgreSQLへのマイグレーションのハマリ所
6 likes
12,307 views
Makoto Kaga
PostgreSQL Conference 2012でのスライド
Technology
Design
Read more
1 of 23
Download now
Downloaded 27 times
1
2
Most read
3
4
5
6
7
8
9
10
Most read
11
12
13
14
15
16
17
18
19
20
Most read
21
22
23
More Related Content
What's hot
(20)
PDF
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
ksk_ha
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
PDF
MQTTとAMQPと.NET
terurou
PDF
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
PDF
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
PDF
インメモリーデータグリッドの選択肢
Masaki Yamakawa
PPT
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
PPTX
RDB開発者のためのApache Cassandra データモデリング入門
Yuki Morishita
PDF
DBスキーマもバージョン管理したい!
kwatch
PDF
Akkaで分散システム入門
Shingo Omura
PDF
MySQLで論理削除と正しく付き合う方法
yoku0825
PPTX
コンテナネットワーキング(CNI)最前線
Motonori Shindo
PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
ksk_ha
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
MQTTとAMQPと.NET
terurou
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
インメモリーデータグリッドの選択肢
Masaki Yamakawa
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
RDB開発者のためのApache Cassandra データモデリング入門
Yuki Morishita
DBスキーマもバージョン管理したい!
kwatch
Akkaで分散システム入門
Shingo Omura
MySQLで論理削除と正しく付き合う方法
yoku0825
コンテナネットワーキング(CNI)最前線
Motonori Shindo
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
Similar to MySQLからPostgreSQLへのマイグレーションのハマリ所
(20)
PDF
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
Takahiro Okumura
PDF
Oratopostgres-hiroshima
Kosuke Kida
PDF
MariaDB migration from commercial database
GOTO Satoru
PPT
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
sakaik
PPTX
MySQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
KEY
My sql casual_in_fukuoka_vol1
Makoto Haruyama
PDF
20120824 PHP+MySQL勉強会LT
Koichiro Nishijima
PPTX
PostgreSQL使いのエンジニアから見たMySQL
toshihiro_kitagawa
PDF
オープンソース・データベースの最新事情
Meiji Kimura
PDF
ついにリリース!! MySQL 8.0 最新情報
yoyamasaki
PDF
Enter the-dolphine
Mikiya Okuno
PDF
MySQL最新情報
yoyamasaki
KEY
1台から500台までのMySQL運用(YAPC::Asia編)
Masahiro Nagano
PDF
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
Toshi Harada
PDF
MySQL 5.5 Update #denatech
Mikiya Okuno
PPTX
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
Ryusuke Kajiyama
PPTX
MySQL clients
yoku0825
ODP
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
Mikiya Okuno
PPTX
いまいまMySQL@OSC2016長岡
sakaik
PDF
Maria db
nekogeruge_987
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
Takahiro Okumura
Oratopostgres-hiroshima
Kosuke Kida
MariaDB migration from commercial database
GOTO Satoru
MySQL最新情報と、データベースのお勉強のススメ-第68回PHP勉強会
sakaik
MySQLのソース・ターゲットエンドポイントとしての利用
QlikPresalesJapan
My sql casual_in_fukuoka_vol1
Makoto Haruyama
20120824 PHP+MySQL勉強会LT
Koichiro Nishijima
PostgreSQL使いのエンジニアから見たMySQL
toshihiro_kitagawa
オープンソース・データベースの最新事情
Meiji Kimura
ついにリリース!! MySQL 8.0 最新情報
yoyamasaki
Enter the-dolphine
Mikiya Okuno
MySQL最新情報
yoyamasaki
1台から500台までのMySQL運用(YAPC::Asia編)
Masahiro Nagano
my sql-postgresql勉強会#6 LT 私的なPostgreSQLの楽しみ方
Toshi Harada
MySQL 5.5 Update #denatech
Mikiya Okuno
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0
Ryusuke Kajiyama
MySQL clients
yoku0825
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
Mikiya Okuno
いまいまMySQL@OSC2016長岡
sakaik
Maria db
nekogeruge_987
Ad
More from Makoto Kaga
(6)
PDF
ワンオペ向け! フットペダルでのスイッチング装置を試作してみた(某プロダクトのマネっこ)【改訂版】
Makoto Kaga
PDF
ワンオペ向け! フットペダルでのスイッチング装置を試作してみた(某プロダクトのマネっこ)
Makoto Kaga
PDF
配信現場のアレコレなければ作る!
Makoto Kaga
PDF
電動雲台無線化への道
Makoto Kaga
PDF
「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜
Makoto Kaga
PDF
Plagger。みんなで使えば恐くない。
Makoto Kaga
ワンオペ向け! フットペダルでのスイッチング装置を試作してみた(某プロダクトのマネっこ)【改訂版】
Makoto Kaga
ワンオペ向け! フットペダルでのスイッチング装置を試作してみた(某プロダクトのマネっこ)
Makoto Kaga
配信現場のアレコレなければ作る!
Makoto Kaga
電動雲台無線化への道
Makoto Kaga
「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜
Makoto Kaga
Plagger。みんなで使えば恐くない。
Makoto Kaga
Ad
Recently uploaded
(9)
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
PPTX
色について.pptx .
iPride Co., Ltd.
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
色について.pptx .
iPride Co., Ltd.
MySQLからPostgreSQLへのマイグレーションのハマリ所
1.
MySQLからPostgreSQLへの マイグレーションのハマリ所 日本PostgreSQLユーザ会 加賀 誠人 @makotokaga 2012年2月24日 PostgreSQL
Conference 2012
2.
アジェンダ • ゴール • 情報の収集 •
テーブル定義の移行 • データの移行 • 移行におけるハマりどころ • まとめ
3.
講演者について • 加賀 誠人
(かが まこと) • @makotokaga • フリーランスWebエンジニア • 日本PostgreSQLユーザ会理事 • 本日の基調講演のUstream担当 • 物欲系Blogも書いています • http://blog.project92.com
4.
ゴール • MySQL+PHPで稼働していたとある
Webアプリケーションを、PostgreSQL +PHPに移行する •ターゲットとなった旧システム • MySQL 5.0.x (InnoDB) • PHP 5.1.x •新システム • PostgreSQL 9.0.x • PHP 5.3.x
5.
どこから手をつけるか? • まずは、情報収集 •
Converting from other Databases to PostgreSQL •http://wiki.postgresql.org/wiki/ Converting_from_other_Databases_to_Post greSQL •「MySQL PostgreSQL migration」で検索
6.
Converting from other Databases
to PostgreSQL
7.
dumpしてrestoreできるか? • MySQLとPostgreSQLでは、型の違
い、SQLの表記の違いがあるので、変 換は必須 •いくつか既存の変換ツールが公開さ れている
8.
型の違い • 多くのデータ型は、双方に存在するが
名前が違うなど、異なっている • バイナリ・ラージ・オブジェクトなど は扱い方も異なる • BLOG v.s. BYTEA
9.
SERIAL型 • MySQLでは、auto_increment • PostgreSQLでは、SEQUENCEが作られ、
default値として「nextval()」が設定される • 直前に使われた値を調べる方法が違う • MySQLにはAPIで提供される mysql_insert_id() があり、直前に使われ た値が簡単に取得できる • PostgreSQLでは、currval()で得られる が、SEQUENCEの名前を知っている必要 がある
10.
SQL文の表記の違い • コメント行の開始文字列の違い •
MySQL : "#" • PostgreSQLは認識しない • PostgreSQL : "--" • MySQLは認識する • 引用符の違い • MySQLは「"」も「'」も使える • 識別子の場合もMySQLは「`」 • などなど……
11.
テーブル定義の移行 • 今回選択した方法 •
Mac OS X用ER図作成ツール「SQL Editor」を使用 • MySQLのテーブル定義を読込み • ターゲットをPostgreSQLに変更 • 一部データ型を修正 • SQLをエクスポート(し、さらに修 正) • PostgreSQLに読み込み
12.
SQLEditorについて • Mac OS
X版のER図作成ツール • http://www.malcolmhardie.com/sqleditor/ • MalcolmHardie Solutions社製 • 79USD
13.
データの移行① • 移行前後、双方のDBに接続し、データを
移行するPHPのプログラムを作成し移行 した • 移行先のPostgreSQLのシステムカタ ログから、移行後のテーブル定義を取得 • MySQLのテーブルを順次SELECT • 各カラムの型に応じて、必要な変換をし て、PostgreSQL側にINSERT • NULL値を適切に処理しないとハマる
14.
データの移行② ② 各テーブルの
① pg_catalogから、変換後の データを順次取得 変換プログラム テーブル定義を取得 (PHPで記述) ③ データを変換して 順次投入 MySQL PostgreSQL
15.
データ移行自体の問題 • 移行そのものに相当の時間を要するた
め、一定の時間止められないサービス だと辛い • 実データで変換を検証する必要がある が、検証そのものにも時間がかかる
16.
移行でのハマりどころ① • timestamp型のふるまい •
MySQLでは「0000-00-00 00:00:00」が許容される • PostgreSQLでは、上記は投入でき ない
17.
移行でのハマりどころ② • CHARACTER(n)型の違い •
長さを指定した場合、n文字(バイト) の長さになるまで、空白が追加される • char(4)のカラムに「foo」が入って いた場合に、PHPからアクセスする と以下の値が取得される •MySQL : "foo" •PostgreSQL : "foo "
18.
移行でのハマりどころ②−2 • psqlでやると…… test=# SELECT
'"' || test || '"' from bar; ?column? ---------- "12" "123" "1" "1234" (4 rows)
19.
移行でのハマりどころ③ • BOOLEANの値の違い •
MySQL: "1" or "0" • 実体は tinyint(1) • "TRUE" or "FALSE"で比較はできる • if ($results) { ... } • PostgreSQL: "t" or "f" • if ($results === 't') { ... }
20.
移行でのハマりどころ④ • ORDER BY句のないクエリー
• PostgreSQLはもちろん、SQLで は、ORDER BY句がない場合は、取 得されるレコードの順番は不定 • MySQLでは、レコードの投入順に出 力されるよう •当然保証されているわけではない?
21.
移行でのハマりどころ⑤ • ORDER BY句でのNULLの扱い
• MySQLは、NULLが先頭に • PostgreSQLは、NULLは末尾に
22.
ORマッパがあっても • 今回ターゲットとなったシステムは、
symfony 0.6.3を利用しており、OR マッパとしてPropelを採用 •謳い文句上は設定を変えれば、簡単 にDBMSの変更が可能というが…… • 実際にはORマッパでは吸収しきれ ていない • アプリの書き換えは避けられない
23.
まとめ • マイグレーションは可能だが、高コスト •
ここで紹介しきれてない非互換性も多 い • 中途半端に動いてしまうものもあるの で、仕様が不明確なシステムの移行だ と危険をともなう • PostgreSQLでないといけない理由 や利点とのトレードオフで判断したい •GIS、ライセンス、などなど
Download