close
Warning:
Can't synchronize with repository "(default)" (Unsupported version control system "svn": /usr/lib/python2.7/dist-packages/libsvn/_fs.so: failed to map segment from shared object: Cannot allocate memory). Look in the Trac log for more information.
2008-10-15
備份聯合目錄 PostgreSQL 到實驗主機
轉換 PostgreSQL 到 MySQL
- [工具] pg2mysql converter (PostgreSQL to MySQL Converter)
- [參考] 遇到 triggers , sequences , domain 這幾個差異時就沒輒了
- 原始 account Table 表
--
-- PostgreSQL database dump
--
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = true;
--
-- Name: account; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--
CREATE TABLE account (
serial smallint DEFAULT nextval(('account_seq'::text)::regclass) NOT NULL,
name character varying(10) NOT NULL,
tel character varying(20) NOT NULL,
fax character varying(20),
mail character varying(20),
department character varying(20) NOT NULL,
unit character varying(20) NOT NULL,
title character varying(20),
admin boolean NOT NULL,
account character varying(20) NOT NULL,
password character varying(20) NOT NULL
);
ALTER TABLE public.account OWNER TO postgres;
- 經 pg2mysql 轉出來的結果有錯,因為有用到 sequence (序列)
-
|
old
|
new
|
|
| 1 | 1 | CREATE TABLE account ( |
| 2 | | int(11) auto_increment smallint auto_increment NOT NULL, |
| | 2 | serial int(11) auto_increment NOT NULL, |
| 3 | 3 | name varchar(10) NOT NULL, |
| 4 | 4 | tel varchar(20) NOT NULL, |
| 5 | 5 | fax varchar(20), |
| … |
… |
|
| 10 | 10 | admin bool NOT NULL, |
| 11 | 11 | account varchar(20) NOT NULL, |
| 12 | 12 | password varchar(20) NOT NULL |
| 13 | | , PRIMARY KEY(`int(11)`) |
| 14 | | ) TYPE=MyISAM; |
| | 13 | , PRIMARY KEY(`serial`) |
| | 14 | ) TYPE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
-
|
old
|
new
|
|
| 1 | 1 | CREATE TABLE data_type ( |
| 2 | | int(11) auto_increment smallint NOT NULL, |
| | 2 | serial smallint auto_increment NOT NULL, |
| 3 | 3 | name varchar(30) NOT NULL, |
| 4 | 4 | parent_id smallint NOT NULL |
| 5 | | , PRIMARY KEY(`int(11)`) |
| | 5 | , PRIMARY KEY(`serial`) |
| 6 | 6 | ) TYPE=MyISAM; |
- [錯誤] Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
-
|
old
|
new
|
|
| 1 | 1 | CREATE TABLE maincase ( |
| 2 | | int(11) auto_increment int(11) auto_increment NOT NULL, |
| | 2 | serial int(11) auto_increment NOT NULL, |
| 3 | 3 | name varchar(60) NOT NULL, |
| 4 | 4 | description varchar(255), |
| 5 | 5 | storage_desc varchar(50), |
| 6 | 6 | quality bool NOT NULL, |
| 7 | 7 | handle_level smallint NOT NULL, |
| 8 | 8 | handle_desc varchar(40), |
| 9 | | location1 point NOT NULL, |
| 10 | | location2 point, |
| | 9 | location1 varchar(50) NOT NULL, |
| | 10 | location2 varchar(50), |
| 11 | 11 | can_supply bool NOT NULL, |
| 12 | 12 | take_free bool NOT NULL, |
| 13 | 13 | owner varchar(10), |
| … |
… |
|
| 15 | 15 | taker varchar(10), |
| 16 | 16 | taker_org varchar(15), |
| 17 | 17 | website text, |
| 18 | | start_time timestamp NOT NULL, |
| 19 | | end_time timestamp NOT NULL, |
| | 18 | start_time timestamp NULL, |
| | 19 | end_time timestamp NULL, |
| 20 | 20 | user_id smallint NOT NULL, |
| 21 | 21 | checked bool DEFAULT 0 NOT NULL, |
| 22 | | insert_time timestamp DEFAULT CURRENT_TIMESTAMP, |
| | 22 | insert_time timestamp NULL, |
| 23 | 23 | cover bool DEFAULT 0 NOT NULL |
| 24 | | , PRIMARY KEY(`int(11)`) |
| | 24 | , PRIMARY KEY(`serial`) |
| 25 | 25 | ) TYPE=MyISAM; |
-
|
old
|
new
|
|
| 1 | 1 | CREATE TABLE maincase_detail ( |
| 2 | | int(11) auto_increment bigint auto_increment NOT NULL, |
| | 2 | serial int(11) auto_increment NOT NULL, |
| 3 | 3 | maincase_id int(11), |
| 4 | 4 | type_id smallint |
| 5 | | , PRIMARY KEY(`int(11)`) |
| | 5 | , PRIMARY KEY(`serial`) |
| 6 | 6 | ) TYPE=MyISAM; |
| 7 | 7 | |
| | 8 | SET NAMES 'utf8'; |
- 為了讓後續 INSERT 進去的中文字元維持 UTF-8, 必須在一開始的 SQL 語法加進 "SET NAMES 'utf8';"
jazz@oceandb:~$ head -n 2 maincase.sql
SET NAMES 'utf8';
INSERT INTO maincase VALUES (9744, 'SBES_OR1_236', '海研一號236航次沿測線 single beam EK500 38 kHz 水深資料', '', false, 1, '', '(119.53454000000001,21.88411)', '(120.40064,22.782060000000001)', true, true, 'NCOR', 'NCOR', 'NCOR', 'NCOR', 'http://www.ncor.ntu.edu.tw/ODBS/odbs_old/cruise/gif/OR1_236.gif', '1989-12-11 00:00:00', '1989-12-12 00:00:00', 1, true, '2005-10-12 14:18:28.929034', false);
jazz@oceandb:~$ mysql ncor -u oceandb -p < maincase.sql
- [工具二] SQL::Translator (aka SQLFairy)
- [參考] 用 Perl 寫的 SQL::Translator (aka SQLFairy)
jazz@oceandb:~$
備忘
Download in other formats: