mysql转pgsql记录与遇到的问题总结

我的思路是先导表再导数据最后修改不同的函数。

1.选择要转的表---选择模型

 2.选择转出的模型

 

 3.点击【确定】后,导出表结构

 4.选择导出的路径。

 

 5.查看导出的表结构 

复制sql去pgsql里面就可以直接执行。这个导的是表结构。

你可以打开表直接复制。

6.手动将主键自增设置

7.将数据导入到pgsql

去除`转义字符,pg识别不了,重置数据库id自增序列的值。

select setval('XXX_id_seq', 3744);

8.修改nacos的配置文件

将数据库的连接从mysql修改为pgsql,修改项目中maven的xml文件,切换数据库连接池

  1. 9.遇到的问题

  2. 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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值