Submit Search
MySQLからPostgreSQLへのマイグレーションのハマリ所
6 likes
12,316 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
Most read
16
17
18
19
20
21
22
23
More Related Content
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
PPTX
いまさら、AWSのネットワーク設計
Serverworks Co.,Ltd.
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
PDF
オンプレミスRDBMSをAWSへ移行する手法
Amazon Web Services Japan
PDF
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
PDF
昨今のストレージ選定のポイントとCephStorageの特徴
Takuya Utsunomiya
PDF
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
いまさら、AWSのネットワーク設計
Serverworks Co.,Ltd.
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
NTT DATA Technology & Innovation
オンプレミスRDBMSをAWSへ移行する手法
Amazon Web Services Japan
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
昨今のストレージ選定のポイントとCephStorageの特徴
Takuya Utsunomiya
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
What's hot
(20)
PPTX
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
wind06106
PDF
3分でわかるAzureでのService Principal
Toru Makabe
PDF
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
PDF
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
Toru Makabe
PDF
KafkaとAWS Kinesisの比較
Yoshiyasu SAEKI
PPTX
PenTesterが知っている危ないAWS環境の共通点
zaki4649
PDF
Docker Compose 徹底解説
Masahito Zembutsu
PDF
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
Amazon Web Services Japan
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
PPTX
AKS と ACI を組み合わせて使ってみた
Hideaki Aoyagi
PDF
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
PPTX
Azure Cosmos DB のキホンと使いドコロ
Kazuyuki Miyake
PPTX
私がなぜZscalerに?
Takayoshi Takaoka
PDF
AWS Black Belt Techシリーズ Amazon CloudSearch
Amazon Web Services Japan
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
PDF
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
PDF
まずやっとくPostgreSQLチューニング
Kosuke Kida
PDF
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
wind06106
3分でわかるAzureでのService Principal
Toru Makabe
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
Toru Makabe
KafkaとAWS Kinesisの比較
Yoshiyasu SAEKI
PenTesterが知っている危ないAWS環境の共通点
zaki4649
Docker Compose 徹底解説
Masahito Zembutsu
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
Amazon Web Services Japan
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
AKS と ACI を組み合わせて使ってみた
Hideaki Aoyagi
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
Azure Cosmos DB のキホンと使いドコロ
Kazuyuki Miyake
私がなぜZscalerに?
Takayoshi Takaoka
AWS Black Belt Techシリーズ Amazon CloudSearch
Amazon Web Services Japan
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Masahito Zembutsu
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
まずやっとくPostgreSQLチューニング
Kosuke Kida
待ち事象から考える、Sql server の改善ポイント
Masayuki Ozawa
Ad
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
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