数据库从Mysql切换到Postgresql常见问题(可直接数据库中修改解决)

文章讲述了在将数据库从Mysql迁移到Postgresql过程中遇到的若干关键问题及解决方案,包括Postgresql如何设置主键自增、字段大小写规则、长度限制,以及含当前时间的插入语法修改。还提到了Navicat连接Postgresql时因版本问题导致的错误及两种解决办法。
摘要由CSDN通过智能技术生成

数据库从Mysql切换到Postgresql遇到的常见语法问题与解决方法

本文涉及的主要是直接在数据库中的sql控制台实现的操作和对数据库表和字段属性的直接修改,下一篇讲项目中包括mapper.xml在内使用到数据库的语法修改

1.设置主键自增

处理转换后数据库中表的自增问题,Mysql数据库支持直接对主键自增,Postgresql数据库只能通过建立序列的方式来实现对主键的自增,所以需要对所有原设主键自增的表进行序列创建和关联。
方法是通过打开sql控制台,先分别执行1.2句,再执行最后两句。其中id是form表的主键,序列起始值自己设置即可,注意表名和主键自己对应好。执行后马上就能看到id成功创建自增序列默认值为nextval(‘form_id_seq’::regclass)

--打开sql控制台,先分别执行1.2句,再执行最后两句
select max(id)+1 from form

CREATE SEQUENCE form_id_seq START 10

ALTER TABLE form ALTER COLUMN id TYPE numeric USING id::numeric;
ALTER TABLE form ALTER COLUMN id SET DEFAULT nextval('form_id_seq'::regclass);

2.字段大小写,表和字段的长度

  1. postgresql表字段或表名为大写时,使用时字段或表名必须添加双引号;
    查询结果别名中有大写需要用双引号包含起来,如果不包含起来查询结果会自动转为小写。
  2. 库名、表名限制命名长度,建议表名及字段名字符总长度小于等于63。
  3. 修改postgresql中qrtz_job_details表中varchar 1为varchar 10,否则运行会提示:对于可变字符类型来说,值太长了(1)

3.含当前时间的插入语法修改

如果使用上篇文章里的sql语句导入时,插入语句insert intovalues使用当前时间的,需要做批量替换。
Mysql中有SYSDATE() 而Postgresql没有 SYSDATE() 函数,换成 NOW()。

4.连接Postgresql直接报错

column “datlastsysoid“ does not exist Line1:SELECT DISTINCT datalastsysoid FROM pg_database
在这里插入图片描述
原因是因为新版本的Postgresql本身的系统表删除了这一列datlastsysoid,导致创建数据库都无法成功。
在这里插入图片描述

解决方法1

2
根据开发人员的回答是Navicat15对较新版本(15以上)的Postgresql的问题,但是在Navicat16.1.5后做了修复。所以安装Postgresql16.1.5以后的版本正常打开了该数据库。

解决方法2

安装一个低版本的Postgresql,确认为15以下,我选择了13.1版本 navicat15可以正常打开该数据库了。
补充下同一台电脑是可以安装两个版本的pg,注意端口号冲突以及用到哪个版本启用哪个版本的服务即可。

下一篇讲项目中包括mapper.xml在内使用到数据库的语法修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值