mysql ddl postgresql_mysql to PostgreSQL

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

一、mysql表

Sql代码 icon_copy.gif

-- Table "ss_users" DDL

CREATETABLE`ss_users` (

`ID` int(11)NOTNULLauto_increment,

`PASSWD` varchar(200)NOTNULL,

`NAME`varchar(80)NOTNULL,

`REALNAME` varchar(80)defaultNULL,

`EMAIL` varchar(200)defaultNULL,

`Depart_ID` int(11) unsigned zerofilldefaultNULL,

`STATUS` int(2)defaultNULL,

`DESCN` varchar(255)defaultNULL,

PRIMARYKEY(`ID`)

) ENGINE=InnoDB DEFAULTCHARSET=utf8;

CREATETABLE`ss_role_resc` (

`id` int(11)NOTNULLauto_increment,

`ROLE_ID` int(11)NOTNULL,

`RESC_ID` int(11)NOTNULL,

PRIMARYKEY(`id`)

) ENGINE=InnoDB DEFAULTCHARSET=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表:

Sql代码 icon_copy.gif

-- Table: ss_users

DROPTABLEss_users;

CREATETABLEss_users

(

id serial NOTNULL,

passwd varchar(200)NOTNULL,

namevarchar(100)NOTNULL,

realname varchar(100),

email varchar(200),

depart_id int8 NOTNULLDEFAULT0,

status int2 NOTNULLDEFAULT1,

descn varchar(255),

CONSTRAINTss_users_pkeyPRIMARYKEY(id)

)

WITHOUT OIDS;

ALTERTABLEss_users OWNERTOpostgres;

CREATETABLEss_role_resc (

id serial NOTNULL,

ROLE_ID int2 NOTNULL,

RESC_ID int2 NOTNULL,

CONSTRAINTss_role_resc_pkeyPRIMARYKEY(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管理更改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值