mysql to PostgreSQL

mysql to PostgreSQL

关键字: mysql postgresql

由于项目需要,需要将mysql数据库转为 PostgreSQL数据库。大概的整理下了。

一、mysql表

Sql代码 复制代码
  1. -- Table "ss_users" DDL  
  2.   
  3. CREATE TABLE `ss_users` (  
  4.    `ID` int(11) NOT NULL auto_increment,  
  5.    `PASSWD` varchar(200) NOT NULL,  
  6.    `NAME` varchar(80) NOT NULL,  
  7.    `REALNAME` varchar(80) default NULL,  
  8.    `EMAIL` varchar(200) default NULL,  
  9.    `Depart_ID` int(11) unsigned zerofill default NULL,  
  10.    `STATUS` int(2) default NULL,  
  11.    `DESCN` varchar(255) default NULL,  
  12.   PRIMARY KEY   (`ID`)  
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
  14.   
  15. CREATE TABLE `ss_role_resc` (  
  16.    `id` int(11) NOT NULL auto_increment,  
  17.    `ROLE_ID` int(11) NOT NULL,  
  18.    `RESC_ID` int(11) NOT NULL,  
  19.   PRIMARY KEY   (`id`)  
  20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

对应的 postgresql表:

Sql代码 复制代码
  1. -- Table: ss_users  
  2.   
  3. DROP TABLE ss_users;  
  4.   
  5. CREATE TABLE ss_users  
  6. (  
  7.    id serial NOT NULL,  
  8.    passwd varchar(200) NOT NULL,  
  9.   name varchar(100) NOT NULL,  
  10.    realname varchar(100),  
  11.    email varchar(200),  
  12.    depart_id int8 NOT NULL DEFAULT 0,  
  13.    status int2 NOT NULL DEFAULT 1,  
  14.    descn varchar(255),  
  15.   CONSTRAINT ss_users_pkey PRIMARY KEY (id)  
  16. )   
  17. WITHOUT OIDS;  
  18. ALTER TABLE ss_users OWNER TO postgres;  
  19.   
  20. CREATE TABLE ss_role_resc (  
  21.    id serial NOT NULL,  
  22.    ROLE_ID int2 NOT NULL,  
  23.    RESC_ID int2 NOT NULL,  
  24.   CONSTRAINT ss_role_resc_pkey PRIMARY KEY (id)  
  25. )  

大概整理了下转化的一些要点。

表对应:
1、MYSQL 的 ID 唯一键 对应 PostgreSQL中的 serial字段。
2、varchar 都一样,注意字符数。
3、int float double 都有对应的字段
4、字段如果有 “`”,去掉。
5、PostgreSQL 是大小写区分的。默认导进去的sql语句都会转为小写。
6、datetime 对应 TIMESTAMP ,date,time 分别都有对应。 PostgreSQL 有 默认 DEFAULT now()。
导入数据:
1、记得带上分号。
2、表 `ss_users` 的 两个 ` 去掉。
3、数据中 如果是双引号 改为 单引号。


可能出现的几个错误:
1、postgres默认安装好像不支持hibernate自增长。会提示hibernate_sequence不存在。
执行CREATE SEQUENCE hibernate_sequence INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1

CACHE 1;即可创建postgres的hibernate自增长支持

2、导出的sql语句 导入到PostgreSQL中的时候 可能出现下面的错误。

language "plpgsql" already exists

把下面注释掉,就可以。
--
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner:
--


3、Postgres另一个小问题上,它的"serial"数据类型(等价于MYSQL的auto_increment)会造成一个"sequence"。如果从

mysql中批量导入数据,会存在 自动 department_id_seq 下的 START 1 不自动增加。解决方法,直接用pgadmin管理更改

来自:http://www.yangxinyong.com/blog/entry/2008_09_17_29_mysql+to+PostgreSQL.html

posted @ 2008-11-06 22:29  Earl_86  阅读(1731)  评论(0编辑  收藏  举报