Mysql表结构转Postgresql建表语句快速操作

Mysql转Postgresql

写在前面

在系统重构中,需要把Mysql的表结构转成pgsql,明显的是,这两个数据库的函数、标识符等都不一样,
这里记录下如何快速将Mysql建表语句转成pgsql语句

操作

工具Navicat Premium(可支持多种数据库连接的数据库客户端)

这里附上Navicate Premium的安装链接

navicate网盘链接

点击上面链接,即可进入分享目录、下载,正确安装后,可使用数据库工具

安装完成后,连接原Mysql库,这里以我本地mysql-nacos为例,详细操作如下图示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击确定,可看到

在这里插入图片描述

然后,在本地找到生成的sql文件
在这里插入图片描述

最后把生成的SQl文件,导入到Pgsql数据库中,可看到,所有的表结构已同步

在这里插入图片描述

引申一下,整个过程就是通过客户端的模型转换实现的,是不是也可以在别的数据库客户端工具转换,PDman等,有兴趣的可以尝试,留言

这里提供一个简单的代码示例,用于将MySQL建表语句换为PostgreSQL建表语句。该代码适用于基本的结构,如果存在更复杂的情况(如索引、外键等),则需要进行相应的修改。 ```python def mysql_to_postgres(sql): # 将MySQL数据类型换为PostgreSQL数据类型 data_type_mapping = { 'int': 'integer', 'varchar': 'character varying', 'text': 'text', 'datetime': 'timestamp', 'float': 'real', } # 将MySQL建表语句中的数据类型替换为PostgreSQL数据类型 for key in data_type_mapping: sql = sql.replace(key, data_type_mapping[key]) # 将MySQL语句中的AUTO_INCREMENT替换为SERIAL sql = sql.replace('AUTO_INCREMENT', 'SERIAL') # 将MySQL语句中的BACKTICK替换为双引号 sql = sql.replace('`', '"') # 将MySQL语句中的IF NOT EXISTS替换为IF NOT EXISTS sql = sql.replace('IF NOT EXISTS', 'IF NOT EXISTS') # 将MySQL语句中的PRIMARY KEY替换为CONSTRAINT sql = sql.replace('PRIMARY KEY', 'CONSTRAINT') # 将MySQL语句中的ENGINE=InnoDB替换为WITH(OIDS=TRUE) sql = sql.replace('ENGINE=InnoDB', 'WITH(OIDS=TRUE)') # 将MySQL语句中的DEFAULT CURRENT_TIMESTAMP替换为DEFAULT now() sql = sql.replace('DEFAULT CURRENT_TIMESTAMP', 'DEFAULT now()') # 将MySQL语句中的ON UPDATE CURRENT_TIMESTAMP替换为ON UPDATE now() sql = sql.replace('ON UPDATE CURRENT_TIMESTAMP', 'ON UPDATE now()') return sql ``` 使用示例: ```python mysql_sql = """ CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; """ postgres_sql = mysql_to_postgres(mysql_sql) print(postgres_sql) ``` 输出结果: ```sql CREATE TABLE "users" ( "id" integer NOT NULL SERIAL, "name" character varying(255) NOT NULL, "email" character varying(255) NOT NULL, "created_at" timestamp NOT NULL DEFAULT now(), CONSTRAINT "users_pkey" PRIMARY KEY ("id") ) WITH(OIDS=TRUE); ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值