背景

前提:此时你没有直接的转换工具将适用于MySQL文件的.sql文件转换为适用于PGSQL的.sql文件。

缺点:此方法相对暴力且不完整,如有问题评论区反应,博主会进行一个实时更新。

该方法适用于如下困境

  • 甲方有从MySQL数据库更换到PGSQL数据库的需求。
  • 另一方不根据需求使用PGSQL数据库,给你发来了MySQL数据库的.sql文件,让你建立PGSQL库。

方法

首先用记事本打开你的MySQL生成的.sql文件。
以下是博主自身实践得到的一些更改规则,可以根据规则进行修改:

更改一

使用记事本的替换功能将所有的 “ ` ” 符号去掉(也就是将该符号替换成NULL)

mysql容器里面执行sql文件 mysql如何运行sql文件_字段

更改二

如果表格的字段中包含 “ \’ ” 符号,将其替换为 “ ‘’ ” 。因为 “ \’ ” 在MySQL里面的作用是将字段两端的 “ ’ ” 符号与字段中的 “ ’ ” 区分开来,在PGSQL中该方式会报错,改成 “ ‘’ ” 即可。

mysql容器里面执行sql文件 mysql如何运行sql文件_mysql_02

补充

此模块用于记录转换过程中遇到的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.”即可。

欢迎大家进行补充!