我的思路是先导表再导数据最后修改不同的函数。
1.选择要转的表---选择模型
2.选择转出的模型
3.点击【确定】后,导出表结构![](https://i-blog.csdnimg.cn/blog_migrate/21717504b4b8d6dd24dbacb3b2c3c503.png)
4.选择导出的路径。
5.查看导出的表结构
复制sql去pgsql里面就可以直接执行。这个导的是表结构。
你可以打开表直接复制。
6.手动将主键自增设置![](https://i-blog.csdnimg.cn/blog_migrate/6ad02d45034e399de82baf18eac979bc.png)
7.将数据导入到pgsql
去除`转义字符,pg识别不了,重置数据库id自增序列的值。
select setval('XXX_id_seq', 3744);
8.修改nacos的配置文件
将数据库的连接从mysql修改为pgsql,修改项目中maven的xml文件,切换数据库连接池
-
9.遇到的问题
-
1、数据库中明明存在这个表,却提示找不到
首先,查询语句已经在数据库里查验过了,没有任何问题,数据库中也有这张表,为啥就是一直报这个错误呢?在网上搜了很久,大概的说法如下:
1.pg是需要区分大小写的,这个也对了,没有问题;
2.可能与原本数据库中自带的表冲突了,这个也排除了,表都是自己新建的,并且表名没有冲突;
3.表的键值和其他表存在依赖关系,这个也并没有。
后来才知道,py库查询时需要在表名前加模式名称,就是这张表属于哪个schema(模式),不然查询时可能找不到表。
(连接数据库时指定模式就好,写完了回来发现了。如果你一个连接的pgsql里有多个数据库,并且不同数据库中有重名的模式,就要指定数据库并指定模式)
2.时间函数冲突
Systate() 不存在,换为pgsql的now()或者current_timestamp
3.Ifnull
Pgsql中没有ifnull函数 对应函数COALESCE(),无缝替换
4.字段类型不匹配
Pgsql对字段类型匹配程度比较严格,数字类型不会像mysql隐式转换为varchar,也可参考第十一点设置全局隐式转换
5.聚合函数报错group by
ERROR: column "materials_manage.reserve_id" must appear in the GROUP BY clause or be used in an aggregate function
用了聚集函数 前面要select的列必须出现在聚集函数或者groupby里,不然它不知道怎么分配。Mysql可能要求不是这么严格。
6.find_in_set()
Pgsql中没有find_in_set这个函数,
mysql中的写法:
select * from folder f,uploads u
where u.id=f.folderId and FIND_IN_SET(‘8’, ‘15,9,13,27’)
在pgsql中的写法:
select * from folder f join uploads u ON u.id = f.folderId where
‘8’ = ANY (string_to_array(some_column,’,’))
7.pgsql中to_char的用法
to_char(xx,’’)
8.DATE_SUB函数替代
9.union 连接的两个相同的字段必须是相同的类型
将两张表的相同字段转换为同样的类型。
10.mouth函数
11.创建类型隐式转化
数字和字符
CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;
SMALLINT和布尔
CREATE CAST (SMALLINT AS BOOLEAN) WITH INOUT AS IMPLICIT;
CREATE CAST (BOOLEAN AS SMALLINT) WITH INOUT AS IMPLICIT;
drop cast if exists (boolean as smallint);
drop cast if exists (smallint as boolean);
如果还是不行,请删除上面的转换执行下面的代码
CREATE OR REPLACE FUNCTION boolean_to_smallint(b boolean) RETURNS smallint AS $$
BEGIN
RETURN (b::boolean)::bool::int;
END;
$$LANGUAGE plpgsql;
CREATE CAST (boolean AS smallint) WITH FUNCTION boolean_to_smallint(boolean) AS implicit;