2008-01-05

從 MySQL 遷移到 PostgreSQL 專題教學(一)

更新:2007-01-04
對映章節:

內容:
如何從 MySQL 快速的遷移到 PostgreSQL, 若是一個新的專案,
那最大的問題點應該是在於這二個資料庫對資料表的定義方式不同之處...

小郭這次拿著 l2j server (天堂二) java即時遊戲伺服器專案
的 sql 檔來做個分析報告給各位參考和教學.
l2j 專案目標為純粹使用 java 來實作改寫
多人即時的NC Soft 公司的 天堂II 3D 遊戲伺服器
,
預設的後端資料庫採用 MySQL, 但因其使用 JDBC 固在遷移 DBMS 時變的輕易 ...
所以囉~少說就有近 50 張資料表 SQL 和萬筆的 Data 要倒到資料庫裡啦 ...

@@"...(開玩笑~您以為線上遊戲公司不豐富遊戲內容~您會付錢玩嗎~呵)

幸好在龐大 pgFoundry 250多個與 PostgreSQL 應用有關的子專案中,
活躍著這個 script 專案開發:
mysql2pgsql http://pgfoundry.org/projects/mysql2pgsql/
看專案名不難了解他就是用來轉換 MySQL 到 PostgreSQL 的 sql 轉換工具,
不到幾 KB 的大小, 但卻是以最強悍的文字處理語言的 Perl 撰寫而成

2007年三月本社群的文章
mysql2pgsql :給 MySQL 用戶遷移至 PostgreSQL 的轉換程序稿本

使用方式最簡易的做法就如下的操作方式(請確定您的系統裡有駱駝哦~'Perl')
$ perl mysql2pgsql.perl [mysql.sql] [pgsql.sql]
[mysql.sql] : 代表您取得的 MySQL 使用的 sql 文件檔
[pgsql.sql] : 代表您轉換後要建立的檔案名稱

我們來經由實際演練自動轉換後的 SQL 內容來比較差異點並補充說明
先拿最小的 sql 檔開刀 (玩家登入帳號管理資料表)
$ perl mysql2pgsql.perl l2jdb_login_account.sql l2jdb_login_account_pg.sql

MySQL: l2jdb_login_account.sql
CREATE TABLE `accounts` (
`login` VARCHAR(45) NOT NULL default '',

`password` VARCHAR(45) ,

`lastactive` DECIMAL(20),

`access_level` INT,

`lastIP` VARCHAR(20),

PRIMARY KEY (`login`)


PostgreSQL: l2jdb_login_account_pg.sql
CREATE TABLE "accounts" (
"login" VARCHAR(45) NOT NULL default '',
"password" VARCHAR(45) ,

"lastactive" DECIMAL(20),
"access_level" INT,

"lastip" VARCHAR(20),

primary key ("login")


差異點:

  1. PostgreSQL 對自定字串用雙引號標記 " ".
  2. DECIMAL 型別名稱雖然相同, 但這是 PostgreSQL 對其'包容'的作法,
    執行 SQL 後套用正式 PG 對等功能的型別 numeric(20,0).
  3. VARCHAR, INT 透過映射(mapping)成 PostgreSQL 的正規型別名稱, 分別為:
    'character varying' & 'integer'.

來看看更完整的圖例說明, 執行後對 MySQL 包容性的轉換, 減低您遷移上的疑慮...


這回順利成功, 下回我們將進行大規模的手術囉~呵

延伸閱讀(Link):

沒有留言:

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)