Oracle2PostgreSQL数据库迁移

本文详细描述了从Oracle数据库迁移到PostgreSQL时的配置修改,如Nacos数据源调整、依赖更新,以及SQL语句之间的转换,包括NVL、日期处理和字符串操作。还提到了Mybatis标签差异和序列管理问题。
摘要由CSDN通过智能技术生成

Oracle2PostgreSQL

记录一次从Oracle数据库迁移到pgsql数据库的项目相关调整。
数据库迁移用的是Navicat的数据传输工具,比较简单,可自行百度,需要注意的就是Oracle数据结构number(0,0) 迁移到pgsql之后会变成numeric(1000,53),需要先处理数据结构再迁移数据。

一、Nacos相关配置修改

     # pgsql主库数据源
      master:
        driver-class-name: org.postgresql.Driver
        url: jdbc:postgresql://127.0.0.1:5432/postgres
        username: postgres
        password: sunsoft

     # validationQuery: SELECT 1 FROM DUAL 修改为:
     validationQuery: SELECT NOW()

二、postgres驱动依赖

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.5</version>
        <scope>runtime</scope>
    </dependency>

三、语法(ORACLE → PostgreSQL)

  1. NVL() → coalesce()
  2. trunc(时间) → date_trunc()
PZ_RQ <= TRUNC(#{dateEnd})+1-1/86400 
-- 改为(结果:2024-03-15 23:59:59)
PZ_RQ <= date_trunc('day', now()::timestamp) + interval '1 day' - interval '1 second';
  1. 字符串连接符 || → concat()函数替代,oracle: ‘a’||null 结果是’a’, pgsql: ‘a’||null 结果是null,这种场景需要用concat替换||
  2. SYSDATE → localtimestamp, now()
  3. wm_concat(r.JSMC) → string_agg(r.JSMC,‘,’)
  4. 分页查询:oracle用rownum,pg用limit
  5. to_char, to_number,to_date:oracle自动格式转换,pg需指定格式
SELECT CAST('123' AS INTEGER); -- 将字符串 '123' 转换为整数类型
SELECT CAST('123.45' AS FLOAT); -- 将字符串 '123.45' 转换为浮点数类型
  1. pgsql中,查询语句from子句中,表名后可以加 as 别名,oracle中表名后不允许出现as
  2. 子查询,pgsql要求严格,必须具有别名才可以
  3. oracle中的空字符串等同于null,pgsql中是分开处理
  4. 数据类型:Oracle和PostgreSQL的数据类型有所不同,例如Oracle中的NUMBER类型在PostgreSQL中对应为NUMERIC类型。在进行数据迁移时,需要确保数据类型的映射正确
  5. Substrb(string, 0, #{sjlbbmlength}) in (#{string1}) → SUBSTRING(string FROM 1 FOR #{stringlength}) IN (#{string1})
  6. 使用ROW_NUMBER()函数来生成查询结果的序号列
SELECT ROW_NUMBER() OVER (ORDER BY column_name) AS row_num, column1, column2, ...
FROM table_name;
  1. Mybatis标签 oracle返回map时字段是大写,pgsql是小写
  2. 查询序列 SEQ_BGPT_SBSPSJB_ID.NEXTVAL → nextval(‘SEQ_BGPT_SBSPSJB_ID’)

四、说明

  • pgsql序列都是重新创建的,部分表已存在数据,自增时会有主键重复的问题,遇到时修改序列当前值即可。
  • 以上只针对我遇到的问题,还有没返现语法区别或问题,请大家补充一下。
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值