AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 65407
Accepted
EMP
EMP
Asked: 2009-09-15 20:28:23 +0800 CST2009-09-15 20:28:23 +0800 CST 2009-09-15 20:28:23 +0800 CST

将 PostgreSQL 数据库迁移到 MS SQL 2005 的最佳工具?

  • 772

我在 PostgreSQL 8.3.1 中有一个数据库,我想迁移到 MS SQL Server 2005(或者可能是 2008),包括表模式和数据。该数据库大小约为 50GB,大约有 400,000,000 行,所以我认为简单的 INSERT 语句是不可能的。谁能推荐执行此迁移的最佳工具?显然它需要可靠,因此目标数据库中的数据与源数据库中的数据完全相同,并且它需要能够在合理的时间内复制该数据量。

sql-server
  • 4 4 个回答
  • 35659 Views

4 个回答

  • Voted
  1. Steve Gray
    2009-09-15T20:54:53+08:002009-09-15T20:54:53+08:00

    如果您在 SQL 2005 机器上安装了适当的 Postgres 支持驱动程序(或希望通过 ODBC 使用 Postgres,或希望将 Postgres 中的数据转储到文件并从中导入),您可以使用 SQL Server 中的导入/导出向导命令复制数据。这将询问您各种问题,然后使用适当的批量插入操作将导入作​​为 SQL Server Integration Services (SSIS) 包作业执行。

    但是,如果该向导不是一个选项,那么值得考虑的是,尽管您有大量行,但行的单个大小平均 < 135 字节,并且有足够的事务日志空间来允许发生 50 GB 事务'简单的 insert' 语句本身并不是不可能的。

    • 6
  2. Best Answer
    EMP
    2009-09-28T17:42:46+08:002009-09-28T17:42:46+08:00

    我最终没有使用任何第三方工具来处理数据,因为我尝试过的工具都没有为大表工作。甚至 SSIS 也失败了。不过,我确实为架构使用了商业工具。所以我的转换过程如下:

    1. 完全转换企业以复制架构(无数据)。
    2. pg_dump以“纯文本”格式从 Postgres 导出数据,这基本上是一个制表符分隔值 (TSV) 文件。
    3. 用于将导出的文件转换为 bcp 可以理解的格式的 Python 脚本。
    4. bcp将数据导入 MSSQL。

    转换步骤处理了 pg_dump 和 bcp 使用的格式的一些差异,例如:

    • pg_dump 将一些 Postgres 特定的东西放在文件的开头并以“.”结束数据,而 bcp 期望整个文件包含数据
    • pg_dump 将 NULL 值存储为“\N”,而 bcp 不需要任何东西来代替 NULL(即,列分隔符之间没有数据)
    • pg_dump 将制表符编码为“\t”,换行符编码为“\n”,而 bcp 按字面意思处理这些
    • pg_dump 总是使用制表符和换行符作为分隔符,而 bcp 允许用户指定分隔符。如果数据包含任何制表符或换行符,这将变得很有必要,因为它们没有被编码。

    我还发现一些在 Postgres 中很好的独特约束在 MSSQL 中被违反了,所以我不得不放弃它们。这是因为在 MSSQL 中 NULL=NULL(即 NULL 被视为唯一值),但在 Postgres 中则不然。

    • 6
  3. David Rickman
    2009-09-15T20:50:47+08:002009-09-15T20:50:47+08:00

    http://www.easyfrom.net/

    你去 :) 不幸的是,它有点贵。

    • 0
  4. dearsina
    2019-06-14T09:24:13+08:002019-06-14T09:24:13+08:00

    将近 10 年过去了,这仍然不是一个直截了当的问题。我最终得到了一个混合解决方案,我通过使用以下命令导出模式和表/列注释来推出自己的模式映射器:

    pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
    

    然后,我编写了一个 PHP 脚本,将架构转换为 T-SQL。随后,我使用以下第 3 方软件进行行的实际导入(无从属关系):

    http://www.convert-in.com/pgs2mss.htm

    它有点慢,但到目前为止一切都很好。我们的数据库比你的小,只有 15GB,但那个工具似乎处理得很好。它也是我能找到的最便宜的,大约 50 美元。到目前为止,这是一项值得的投资。

    • 0

相关问题

  • sql server 连接字符串上的网络数据包大小以提高吞吐量

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • SQL 洗衣清单

  • OPENROWSET、二进制文件、varchars 和 varbinaries

  • 聚集索引与非聚集索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve