我需要将一个Postgres 7的数据库迁移到SQL Server 2008中。我熟悉SSIS导入和导出向导,但我不知道如何定义数据源或定义数据提供程序。
什么是将Postgres迁移到SQL Server的最佳方法,以及如何定义Postgres的数据源/驱动程序?
我需要将一个Postgres 7的数据库迁移到SQL Server 2008中。我熟悉SSIS导入和导出向导,但我不知道如何定义数据源或定义数据提供程序。
什么是将Postgres迁移到SQL Server的最佳方法,以及如何定义Postgres的数据源/驱动程序?
<dtm:ProviderDescriptor SourceType="System.Data.Odbc.OdbcConnection">
...元素我不得不更改属性...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "COLUMN_SIZE"
NumericPrecisionColumnName = "COLUMN_SIZE"
NumericScaleColumnName = "DECIMAL_DIGITS"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
...到...
<dtm:ColumnSchemaAttributes
NameColumnName = "COLUMN_NAME"
OrdinalPositionColumnName="ORDINAL_POSITION"
DataTypeColumnName = "TYPE_NAME"
MaximumLengthColumnName = "LENGTH"
NumericPrecisionColumnName = "PRECISION"
NumericScaleColumnName = "SCALE"
NullableColumnName="NULLABLE"
NumberOfColumnRestrictions="4"
/>
MaximumLengthColumnName
、NumericPrecisionColumnName
和NumericScaleColumnName
属性值为"LENGTH"
、"PRECISION"
和"SCALE"
。一旦这个更改完成,从PostgreSQL到SQL Server的导入就成功了。ProviderDescriptors.xml~
)有所帮助。因此,顺序很重要。 - Vertigo祝你使用SQL Server导入和导出向PostgreSQL导入数据好运。但是,我已经阅读了许多人在使用中遇到困难的留言板帖子,例如:
这是我在此主题上找到的最有用的线程:
为了帮助与我有相似目标的人。在 SQL Server 导入和导出向导的数据源下拉菜单中,不要选择“PostgreSQL OLE DB Provider”,而应选择“.Net Framework Data Provider for Odbc”。
然后,您必须创建一个 DSN 并提供 ConnectionString。以下 ConnectionString 对我有效:
Driver={PostgreSQL};Server=localhost;Port=5432;Database=TestMasterMap;Uid=postgres;Pwd=;
要创建 DSN,您必须进入“管理工具” à “数据源(ODBC)”,并创建用户 DSN。完成后,可以在 SQL Server 导入和导出向导的 DSN 文本框中提供 DSN 名称。
一位评论者声称它起作用了,但他在大表格上遇到了“在读取元组时内存不足”的错误。因此,对于超过 300 万行的表格,他不得不将导入分解成 300 万行的块。
此外,在该线程中还有一个本地的.NET用于PostgreSQL的提供程序链接。
就我个人而言,如果这是我只需要做一次且我相当了解模式和数据的情况下,我会尝试以下步骤:
以上步骤可能需要花费的时间比花费数天来处理SSIS导入/导出向导和PostgreSQL更少(但如果这些工具能够正常工作,那将是很好的!)
@echo off
set DbName=YOUR_POSTGRES_DB_NAME
set csvpath=C:\PATH_TO_CSV\CSV_NAME.csv
set username=YOUR_POSTGRES_DB_USERNAME
:: Export to CSV, note we're using a ~ delimiter to avoid issues with commas in fields
psql -U %username% -d %DbName% -c "COPY (select * from SOURCE_TABLE_NAME) TO STDOUT (FORMAT CSV, HEADER TRUE, DELIMITER '~', ENCODING 'UTF8');" > %csvpath%
:: Import CSV to SQL Server
set logpath=C:\bcplog.txt
set errorlogpath=C:\bcperrors.txt
set sqlserver=YOUR_SQL_SERVER
set sqldb=YOUR_DB_NAME
:: page code 65001 = UTF-8
bcp DESTINATION_TABLE_NAME IN %csvpath% -t~ -F1 -c -C65001 -S %sqlserver% -d %sqldb% -T -o %logpath% -e %errorlogpath%