我有一个 PostgreSQL 数据库,我想将其迁移到 SQL Server - 架构和数据。我很穷,所以我不想付任何钱。我也很懒,所以不想做太多工作。目前我正在逐个桌子做这个,大约有100个桌子要做。这是极其乏味的。
有什么技巧可以达到我想要的效果吗?
您应该能够在此 Serverfault 页面中接受的答案中找到一些有用的信息:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql-2005 https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql-2005.
如果您可以在没有数据的情况下转换模式,则可以使用以下命令缩短数据的步骤:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
这个负载会很慢,但是--column-inserts
option 为每行数据生成最通用的 INSERT 语句,并且应该兼容。
编辑:有关转换架构的建议如下:
我首先会转储架构,但删除与所有权或权限有关的任何内容。这应该足够了:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
编辑此文件以添加行BEGIN TRANSACTION;
到开始和ROLLBACK TRANSACTION;
到最后。现在您可以加载它并在 SQL Server 的查询窗口中运行它。如果出现任何错误,请确保转到文件底部,突出显示 ROLLBACK 语句并运行它(在突出显示语句时按 F5)。
基本上,您必须解决每个错误,直到脚本干净地运行为止。然后你可以改变ROLLBACK TRANSACTION
to COMMIT TRANSACTION
并运行最后一次。
不幸的是,我无法帮助您解决您可能会看到的错误,因为我从未从 PostgreSQL 转到 SQL Server,只有反过来。然而,我认为有些事情会成为一个问题(显然,这不是一个详尽的列表):
- PostgreSQL 通过链接一个字段来自动递增字段
NOT NULL INTEGER
字段到一个SEQUENCE
用一个DEFAULT
。在 SQL Server 中,这是一个IDENTITY
列,但它们并不完全相同。我不确定它们是否等效,但是如果您的原始架构充满了“id”字段,您可能会遇到一些麻烦。不知道SQL Server有没有CREATE SEQUENCE
,因此您可能必须删除它们。
- 数据库函数/存储过程不在 RDBMS 平台之间进行转换。您需要删除任何
CREATE FUNCTION
语句并手动翻译算法。
- 请注意数据文件的编码。我是 Linux 人员,所以我不知道如何在 Windows 中验证编码,但您需要确保 SQL Server 期望的内容与您从 PostgreSQL 导入的文件相同。
pg_dump
有一个选项--encoding=
这将让您设置特定的编码。我似乎记得 Windows 倾向于使用两字节的 UTF-16 编码来表示 Unicode,而 PostgreSQL 使用 UTF-8。由于 UTF-16 输出,我在从 SQL Server 到 PostgreSQL 时遇到了一些问题,因此值得研究。
- PostgreSQL 数据类型
TEXT
简单来说就是一个VARCHAR
没有最大长度。在 SQL Server 中,TEXT
是......复杂(并且已弃用)。原始架构中声明为的每个字段TEXT
需要检查适当的 SQL Server 数据类型。
- SQL Server 有额外的数据类型
UNICODE
数据。我对它不够熟悉,无法提出建议。我只是指出这可能是一个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)