原架構:PHP + MySQL。2001 年夏因主機商機房故障更換供應商,新商強力推薦 PostgreSQL,強調其穩定性優於 MySQL。遷移過程中 MySQL 多次導入大量資料崩潰、資料損壞,最終決定全面轉向 PostgreSQL。
mysqldump -u username -p databasename > sqldump.txt
將 dump 中的 CREATE TABLE 獨立出來,按 PostgreSQL 語法重寫:
CREATE TABLE practicetable (
someID INT AUTO_INCREMENT PRIMARY KEY,
time TIMESTAMP DEFAULT NOW(),
name VARCHAR(50),
address VARCHAR(50),
state VARCHAR(2),
country VARCHAR(3) DEFAULT 'USA',
postlcode VARCHAR(15),
age SMALLINT,
lattitude REAL,
longitude REAL,
somebool BOOLEAN,
message TEXT
);
CREATE TABLE practicetable (
someID SERIAL PRIMARY KEY,
time TIMESTAMP DEFAULT NOW(),
name VARCHAR(50),
address VARCHAR(50),
state VARCHAR(2),
country VARCHAR(3) DEFAULT 'USA',
postlcode VARCHAR(15),
age SMALLINT,
lattitude REAL,
longitude REAL,
somebool BOOLEAN,
message TEXT
);
| MySQL | PostgreSQL | 說明 |
|---|---|---|
AUTO_INCREMENT | SERIAL | 自增主鍵 |
NOW() | NOW() | 相容 |
TINYINT | SMALLINT | PG 無 TINYINT |
TEXT | TEXT | 相容 |
ENGINE=MyISAM | 無 | PG 無存儲引擎概念 |
使用 COPY 指令或 psql 匯入純資料 SQL(INSERT 語句)。
mysql_connect → pg_connectmysql_query → pg_querymysql_fetch_array → pg_fetch_arraymysql_error → pg_last_errorLIMIT 10 OFFSET 20 → PG LIMIT 10 OFFSET 20(9.0+ 相容)CONCAT(a,b) / a || b → PG 僅支援 a || bDATE_ADD() → PG INTERVAL 語法LAST_INSERT_ID() → PG currval('seq_name') 或 RETURNING id"user"