由于项目需要,需要将mysql数据库转为 PostgreSQL数据库。大概的整理下了。
一、mysql表
-
-
- CREATE TABLE `ss_users` (
- `ID` int(11) NOT NULL auto_increment,
- `PASSWD` varchar(200) NOT NULL,
- `NAME` varchar(80) NOT NULL,
- `REALNAME` varchar(80) default NULL,
- `EMAIL` varchar(200) default NULL,
- `Depart_ID` int(11) unsigned zerofill default NULL,
- `STATUS` int(2) default NULL,
- `DESCN` varchar(255) default NULL,
- PRIMARY KEY (`ID`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
- CREATE TABLE `ss_role_resc` (
- `id` int(11) NOT NULL auto_increment,
- `ROLE_ID` int(11) NOT NULL,
- `RESC_ID` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Table "ss_users" DDL CREATE TABLE `ss_users` ( `ID` int(11) NOT NULL auto_increment, `PASSWD` varchar(200) NOT NULL, `NAME` varchar(80) NOT NULL, `REALNAME` varchar(80) default NULL, `EMAIL` varchar(200) default NULL, `Depart_ID` int(11) unsigned zerofill default NULL, `STATUS` int(2) default NULL, `DESCN` varchar(255) default NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `ss_role_resc` ( `id` int(11) NOT NULL auto_increment, `ROLE_ID` int(11) NOT NULL, `RESC_ID` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
对应的 postgresql表:
-
-
- DROP TABLE ss_users;
-
- CREATE TABLE ss_users
- (
- id serial NOT NULL,
- passwd varchar(200) NOT NULL,
- name varchar(100) NOT NULL,
- realname varchar(100),
- email varchar(200),
- depart_id int8 NOT NULL DEFAULT 0,
- status int2 NOT NULL DEFAULT 1,
- descn varchar(255),
- CONSTRAINT ss_users_pkey PRIMARY KEY (id)
- )
- WITHOUT OIDS;
- ALTER TABLE ss_users OWNER TO postgres;
-
- CREATE TABLE ss_role_resc (
- id serial NOT NULL,
- ROLE_ID int2 NOT NULL,
- RESC_ID int2 NOT NULL,
- CONSTRAINT ss_role_resc_pkey PRIMARY KEY (id)
- )
-- Table: ss_users DROP TABLE ss_users; CREATE TABLE ss_users ( id serial NOT NULL, passwd varchar(200) NOT NULL, name varchar(100) NOT NULL, realname varchar(100), email varchar(200), depart_id int8 NOT NULL DEFAULT 0, status int2 NOT NULL DEFAULT 1, descn varchar(255), CONSTRAINT ss_users_pkey PRIMARY KEY (id) ) WITHOUT OIDS; ALTER TABLE ss_users OWNER TO postgres; CREATE TABLE ss_role_resc ( id serial NOT NULL, ROLE_ID int2 NOT NULL, RESC_ID int2 NOT NULL, CONSTRAINT ss_role_resc_pkey PRIMARY KEY (id) )
大概整理了下转化的一些要点。
表对应:
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