背景
前提:此时你没有直接的转换工具将适用于MySQL文件的.sql文件转换为适用于PGSQL的.sql文件。
缺点:此方法相对暴力且不完整,如有问题评论区反应,博主会进行一个实时更新。
该方法适用于如下困境:
- 甲方有从MySQL数据库更换到PGSQL数据库的需求。
- 另一方不根据需求使用PGSQL数据库,给你发来了MySQL数据库的.sql文件,让你建立PGSQL库。
方法
首先用记事本打开你的MySQL生成的.sql文件。
以下是博主自身实践得到的一些更改规则,可以根据规则进行修改:
更改一
使用记事本的替换功能将所有的 “ ` ” 符号去掉(也就是将该符号替换成NULL)
更改二
如果表格的字段中包含 “ \’ ” 符号,将其替换为 “ ‘’ ” 。因为 “ \’ ” 在MySQL里面的作用是将字段两端的 “ ’ ” 符号与字段中的 “ ’ ” 区分开来,在PGSQL中该方式会报错,改成 “ ‘’ ” 即可。
补充
此模块用于记录转换过程中遇到的bug,以及修改方法。
补充一
PGSQL建库的顺序会依照.sql文件中的建表顺序进行建表,要观察MySQL生成的.sql文件的建表顺序是否正确(确保有主键的表先建立,在建立以来相关的表)。
补充二
确保数据入表的表格字段类型与.sql文件的字段数据类型相符,否则要使用如下命令进行表格字段数据类型的更换。
ALTER TABLE 【表名】 ALTER COLUMN 【列名】 type 新类型;
上述如果报错根据error提示更换命令如下:
alter table 【表名】 alter column 【字段名】 type 【字段类型】 using 【字段新类型】;
如果字段数据类型为varchar(xxx)的时候,字段大小大于xxx,可将字段类型改为text即可。
补充三
如果插入的数据与表中的重复了,PGSQL会直接报错运行进行不下去,可使用如下命令:
- 插入完全一样的数据,在插入数据命令最后一行加上
on conflict(重复字段) do nothing;
- 插入不同的数据并更新规定的字段,在插入数据命令最后一行加上
on conflict(重复字段) do update SET aaa = EXCLUDED.aaa;
补充四
如果PGSQL中存在多个数据库,单个表名没法进行插入时,可通过记事本将.sql文件中所有的 “insert into” 命令改成 “insert into xxx.” ,但此时记事本会自动将该替换后面加上一个空格,变为“insert into xxx. ”,再进行一次修改,将“insert into xxx. ”改为“insert into xxx.”即可。
欢迎大家进行补充!