Oracle迁移到PostgreSQL实战记录

本篇将介绍Oracle迁移到PgSQL的实战经验,使用的方法是Navicat提供的,具体的方法可行性和操作可以看我之前的介绍。
不同数据库之间的数据迁移方案:https://blog.csdn.net/zhangjian8641/article/details/108377225

迁移Oracle数据表结构到Pgsql中

在Navicat中找到数据传输,填写源数据和目标数据
在这里插入图片描述
点击选项只选择传输表结构
在这里插入图片描述

然后 下一步选择要传输的表 再 下一步等待传输完成 即可。

修改表结构

1、将有了表结构的Pgsql的表结构导出成sql文件
在这里插入图片描述
2、打开导出的sql文件,将 numeric(1000,53) 批量替换成 numeric
这是我发现要修改的结构,如果还有其他要修改的结构,同理修改。
在这里插入图片描述
3、将Pgsql中的表全部删除,把修改后的结构sql文件导入Pgsql
在这里插入图片描述

迁移Oracle数据结构到Pgsql中

同样在Navicat中找到数据传输,填写源数据和目标数据,其他都一样,就是在选项中改为传输数据
在这里插入图片描述

Pgsql的大小写敏感问题

由于我的Oracle数据库中,表名和字段名都是使用大写的,迁移到pgsql后发现,pgsql的大小写的规则为:

  • 字段名为小写:不区分大小写,不管是大小写都一律转为小写
  • 字段名为大写:区分大小写,并且需要加上双引号才能识别

小写实例:
在这里插入图片描述
大写实例:
在这里插入图片描述
所有我们需要将表名和字段名改为小写,可以使用下面的sql全部替换。
1、创建替换函数

CREATE OR REPLACE FUNCTION "public"."exec"("sqlstring" varchar)
  RETURNS "pg_catalog"."varchar" AS $BODY$
    declare
        res varchar(50);
    BEGIN
        EXECUTE sqlstring;
        RETURN 'ok';
    END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

2、执行全部替换SQL

-- 根据条件查询所有大写的column
select * from information_schema.columns where table_schema='public' and table_name<>'pg_stat_statements' and column_name <> lower(column_name);

-- 通过下列语句转换column_name中的大写字母
SELECT
    exec('alter table "' || table_name || '" rename column  "' || column_name || '" to "' || lower( column_name ) || '";')
FROM
    information_schema.COLUMNS 
WHERE
    table_schema = 'public' 
    AND column_name <> lower(column_name)
    AND table_name <> 'pg_stat_statements';
    
-- 查询大写的table_name
SELECT * FROM information_schema.TABLES WHERE   table_schema = 'public' AND table_name <> lower( table_name );

-- 修改表名中的大写为小写
SELECT
    exec ( 'alter table "' || table_name || '" rename to "' || lower( table_name ) || '";' ) 
FROM
    information_schema.tables 
WHERE
    table_schema='public' 
    and table_name <> lower(table_name);

转换大小写的SQL改编自:https://www.cnblogs.com/heibai-ma/p/13675068.html

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 将Oracle数据库迁移PostgreSQL需要以下步骤: 1. 确定迁移的目标和范围,包括数据库大小、数据类型、表结构、索引、触发器、存储过程等。 2. 在PostgreSQL中创建相应的数据库和表结构,确保与Oracle数据库的结构一致。 3. 将Oracle数据库中的数据导出为SQL文件,然后将其导入到PostgreSQL数据库中。 4. 对于Oracle数据库中的存储过程和触发器,需要将其转换为PostgreSQL的语法,并重新创建。 5. 对于Oracle数据库中的索引和约束,需要根据PostgreSQL的语法进行调整和重新创建。 6. 对于Oracle数据库中的特殊数据类型,如BLOB和CLOB,需要将其转换为PostgreSQL支持的数据类型。 7. 对于Oracle数据库中的特殊功能,如分区表和分布式数据库需要根据PostgreSQL的功能进行调整和重新实现。 8. 迁移完成后,需要进行测试和验证,确保数据的完整性和正确性。 总之,将Oracle数据库迁移PostgreSQL需要仔细的规划和准备,以确保迁移的顺利和成功。 ### 回答2: Oracle是大型关系数据库管理系统,在企业中应用广泛。然而,随着开源数据库(例如PostgreSQL)的发展,越来越多的企业开始考虑将其数据库迁移到开源数据库上。PostgreSQL是一个强大的、支持高级数据类型的开源数据库,具有高度可扩展性和良好的安全性。 当企业考虑将它们的Oracle数据库迁移PostgreSQL时,需要考虑以下因素: 1. 数据的转换:OraclePostgreSQL之间存在差异,例如,它们的数据类型、架构等有所不同。因此,在将数据从Oracle迁移PostgreSQL时,需要进行适当的数据转换。 2. 应用程序的兼容性:迁移数据库需要检查现有的应用程序是否与PostgreSQL兼容,以确保它们可以正确地访问新数据库。 3. 业务功能和需求:企业需要根据其业务功能和需求来选择适当的数据库。在进行这种类型的迁移时,需要考虑企业的长期业务规划。 4. 数据库管理员技能:OraclePostgreSQL的管理方式有所不同,因此,企业需要评估其当前的数据库管理员技能,并考虑是否需要培训他们以管理重构后的PostgreSQL数据库。 5. 外部支持和服务:在迁移过程中,企业需要明确了解可用的支持和服务,并考虑与供应商签订合同。 在考虑Oracle数据库迁移PostgreSQL时,需要评估各种因素,并进行适当的规划和准备。正确的数据库迁移可以提高企业的效率和生产力,并为企业拓展未来提供了更多的可能性。 ### 回答3: Oracle是一款常用的关系型数据库,而PostgreSQL则是在开源社区中很受欢迎的关系型数据库管理系统(RDBMS)。在某些情况下,企业可能需要考虑将其Oracle数据库迁移PostgreSQL上。 1. 性能和可扩展性 PostgreSQLOracle在某些方面表现得更好。例如,PostgreSQL在存储和同步数据方面表现更出色并且能够更好地处理高并发请求。此外,与Oracle相比,PostgreSQL的可扩展性更强,这对于需要大规模处理的大型企业来说是非常有益的。 2. 开源 PostgreSQL是一个开源项目,这意味着它拥有很多社区支持,可以获得更高级别的技术支持,从而提高了可靠性和稳定性。但是,Oracle是一个商业产品,需要额外的付费才能获得更好的支持。因此,从成本角度来讲,PostgreSQL是一个更好的选择。 3. 数据迁移 数据库迁移需要快速且高效地完成,如果不小心,就可能导致数据遗失或无法恢复。数据迁移需要先对应用程序和数据库进行访问控制的修改。然后,对于表,索引和视图等所有对象,需要PostgreSQL中进行重建。标准迁移方式通常涉及导出Oracle数据,将其转换为PostgreSQL可用的格式,然后导入PostgreSQL。 4. 兼容性和转换 OraclePostgreSQL之间的语法和特性是不同的,所以需要进行转换。PostgreSQL的一些功能,例如数组和枚举,在Oracle中是不存在的。需要数据库转换后再进行使用。除此之外,PostgreSQL有一个更强大的命令行界面,可在迁移过程中缩短学习曲线和响应时间。 总体来说,Oracle迁移PostgreSQL不是一项容易的任务,需要企业在决定迁移之前进行彻底的考虑和规划。但是,一旦完成迁移,就可以获得更好的性能和更具成本效益的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值