数据库从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.字段大小写,表和字段的长度

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

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

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

4.连接Postgresql直接报错

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

解决方法1

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

解决方法2

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

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

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。