目录
实际迁移入门
模式迁移
迁移工具
免费/开源工具
ETL工具
手动迁移模式
数据迁移
开源工具
ETL工具
手动迁移数据
ETL/ELT注意事项
Talend
Pentaho
报表平台
JasperReports
BIRT
Pentaho报表
OLAP(分析)平台
Pentaho Mondrian
Apache Kylin
调度选项
应用程序/服务迁移
技术堆栈/组件/驱动程序(Java,.NET驱动程序)
Java应用程序
.NET应用程序
迁移过程的第一步是收集和分析以下信息:
一旦掌握了所有要求并设置了PostgreSQL数据库实例,第一步就是迁移数据库模式和对象。
可以手动或使用工具将模式从SQL Server迁移到PostgreSQL。有免费的商业工具可用于将模式和数据从一个平台迁移到另一个平台。
免费工具由PostgreSQL社区爱好者开发和提供。
pgloader将SQL Server数据库迁移到PostgreSQL。它支持自动发现模式,包括索引的建立,主键和外键约束,并提供各种强制转换规则,可以将SQL Server数据类型转换为等效的PostgreSQL数据类型。它还支持加载数据。
Sqlserver2pgsql是将SQL Server模式转换为PostgreSQL模式的Perl脚本。它还可以选择生成Pentaho数据集成器(Kettle)作业,以将表数据从SQL Server迁移到PostgreSQL。
尽管Talend和Pentaho Kettle等ETL工具提供了在加载数据时随时随地创建模式的选项,但我强烈建议不要使用此功能。这是因为索引,触发器和约束在迁移期间不会保留。仅创建具有推断数据类型的列的表结构。
请查看ETL注意事项部分,以获取有关该主题的详细讨论。
特定于云供应商的工具
如果要将SQL Server数据库迁移到AWS Aurora(与PostgreSQL兼容),则可以使用AWS Schema Conversion Tool(SCT)迁移模式。SCT是一个桌面应用程序,可以分析您的SQL Server架构并生成PL / PGSQL脚本以将模式迁移到PostgreSQL。SCT在迁移表,视图,索引等方面做得很好,但是仅部分和不完全地迁移了诸如存储过程和触发器之类的代码对象。您将意识到必须进行大量重写才能使其与PostgreSQL一起正常工作。我的建议是不要依赖自动生成的代码,而是将所有SQL Server存储过程重写为PostgreSQL函数。
AWS Schema转换工具
请注意,此工具不会迁移数据。要迁移数据,您可以使用Talend或Pentaho之类的ETL工具,也可以选择使用AWS Data Migration Service,该服务是一种AWS产品,可用于将大量数据从源系统迁移到AWS Aurora数据库。
同样,其他云提供商也使用类似的工具将模式和数据迁移到PostgreSQL数据库。
手动迁移涉及:
这是迁移模式和数据的最准确方法,但是不幸的是,仅适用于只有少量表的小型数据库。对于具有数百个表和存储过程的大型数据库,这是不切实际的方法。
一旦迁移了模式并创建了表,下一步的逻辑步骤就是将数据从SQL Server数据库表移至PostgreSQL数据库表。
如模式迁移部分所述,有一些免费工具可用于随模式迁移数据。pgloader和Sqlserver2pgsql允许您迁移数据。
AWS数据迁移服务(DMS)专门用于将数据从外部源迁移到AWS Aurora数据库。请注意,此服务不是免费的,而是根据传输数据的大小收费。
Talend和Pentaho等ETL工具是在数据库之间移动大量数据的极佳解决方案。您可以创建Talend软件包或Pentaho Kettle软件包,以轻松,高效和稳定的方式在数据库表之间传输数据。
手动迁移涉及以下步骤:
ETL是指提取、转换和加载,它是一个三步过程,用于从各种来源(可以以各种形式存在)中提取数据,清理和转换并加载到目标数据库中。数据库系统通常从上游系统接收数据,并通过ETL/ELT流程将数据发送到下游系统。
SQL Server集成服务(SSIS)是SQL Server数据库的首选ETL工具,并与旧版本的SQL Server捆绑在一起,但是Microsoft最近将两者分开,并在免费提供的SQL Server数据工具(SSDT)下捆绑了SSIS。这意味着您可以从字面上保留您的SSIS软件包并使它们与PostgreSQL一起使用。我强烈建议您不要使用这种方法,因为SSIS没有本机驱动程序可以连接到PostgreSQL。您将不得不使用ODBC或使用商业第三方驱动程序。
开源数据库通常有大量的ETL/ELT开源解决方案。Talend和Pentaho是两个这样的工具,它们最初是作为开源项目,后来被其他公司收购。您可以在没有支持的情况下使用开源版本,或者在需要支持的情况下使用商业版本。
Talend是一种快速的ETL处理机器,具有对PostgreSQL的内置支持。Talend Open Studio是基于Eclipse的GUI工具,具有拖放功能,可让您创建ETL程序包并对其进行测试。它在后台为您创建Java代码,还将软件包编译为jar文件。因此,它可以在支持Java的任何平台上运行。Talend仅用于开发软件包,不需要安装在运行作业的计算机上。它以开源和商业形式提供。Talend Open Source不附带调度程序,因此调度作业可能是一个挑战。您必须使用平台提供的调度程序,例如crontab,Windows Task Scheduler或Cloud调度程序。
Pentaho Data Integrator(Kettle)是另一种流行的ETL工具,具有对PostgreSQL的内置支持。与Talend一样,Pentaho Kettle也是基于Java的软件,可以在任何支持Java的平台上运行。它最初是一个开源项目,后来被日立系统公司收购。现在,它既有开源版本,也有商业版本。
SQL Server的事实报表平台是SQL Server Reporting Services(SSRS)。在SQL Server的早期版本中,SSRS与数据库捆绑在一起,并且需要许可证才能使用。在最新版本中,Microsoft将SSRS作为SQL Server数据工具(SSDT)的一部分捆绑在一起,可以免费使用。SSRS支持许多数据库,如果您已经在使用SSRS,则可以通过将报表指向PostgreSQL数据库来继续使用报表。
PostgreSQL没有附带它自己的报表工具,但是有很多开源报表解决方案和商业报表解决方案可以连接到PostgreSQL数据库并生成报表。该列表太长,无法就其中每一个进行讨论,但是,很少有工具能脱颖而出,值得一提:
JasperReports Server是一个独立的可嵌入式报表服务器。它提供报表和分析功能,可以嵌入到Web或移动应用程序中,也可以作为企业的中心信息中心,通过以各种文件格式实时或按计划向浏览器、移动设备或电子邮件收件箱提供关键任务信息。JasperReports Server经过优化,可以共享、保护和集中管理Jaspersoft报表和分析视图
商业智能和报表工具项目(BIRT)是基于Eclipse的开源技术平台,用于创建可以嵌入到富客户端和Web应用程序中的数据可视化和报表。
Pentaho Reporting是一套开源工具,可让您创建PDF,Excel,HTML,Text,Rich-Text-File,XML和CSV数据的像素完美报表。这些计算机生成的报表可以轻松地将来自各种来源的数据精简为人类可读的形式。
以上所有解决方案在开源版和商业版中均可用。
SQL Server分析服务(SSAS)是SQL Server的事实上的分析平台,是一种在线分析处理和数据挖掘工具,供组织用来分析和理解可能分布在多个数据库中,或分散在不同表或文件中的信息。
PostgreSQL没有内置的OLAP服务器,但是有很多开源和商业OLAP解决方案可供您使用,以替代SSAS报表和多维数据集。
Mondrian是一个开放源代码在线分析处理服务器(OLAP)解决方案,使业务用户可以实时分析大量和复杂的数据。
Apache Kylin是一个开放源代码的分布式分析引擎,旨在为支持极大数据集的Hadoop和Alluxio提供SQL接口和多维分析。它最初由eBay开发,现在是Apache Software Foundation的项目。
SQL Server附带了SQL Agent,可让您调度运行SSIS包、执行SQL查询和存储过程以及执行OS任务和程序的作业。
PostgreSQL具有pgAgent,它是PostgreSQL数据库的作业调度代理,能够按复杂的调度运行多步批处理或shell脚本以及SQL任务。
请注意,某些基于云的PostgreSQL产品不支持pgAgent之类的插件。在这些情况下,您可能想要利用特定于云的调度程序,例如AWS Batch。AWS Batch调度程序评估何时、何地以及如何运行已提交到作业队列的作业。只要满足了对其他作业的所有依赖关系,作业就会以提交时的顺序大致运行。
数据库迁移完成后,您将需要迁移指向SQL Server数据库以指向新PostgreSQL数据库的应用程序,服务,报表系统等。
PostgreSQL支持ODBC,并且还具有用于大多数编程语言和框架的本机驱动程序:
从Java应用程序和服务连接到PostgreSQL数据库主要是通过JDBC驱动程序。请查看PostgreSQL JDBC页面以获取更多详细信息。
Npgsql是迄今为止使用最广泛的PostgreSQL开源.NET连接器。它是在ADO.NET之上构建的高性能驱动程序,并通过使用与SQL Server本机驱动程序相似的对象名称来提供简单的迁移路径。例如,要更改连接对象,请将SqlConnection替换为NpgsqlConnection。
有关完整列表,请查看驱动程序和接口页面。
上一篇:将您的SQL Server工作负载迁移到PostgreSQL –第2部分
下一篇:将您的SQL Server工作负载迁移到PostgreSQL –第4部分