【问题标题】:SSIS data transfer adding characters (SQL Server to Postgres)SSIS 数据传输添加字符(SQL Server 到 Postgres)
【发布时间】:2012-12-26 13:25:02
【问题描述】:

我创建了一个 SSIS 包,它从 SQL Server 数据库中取出地理数据并将其复制到 Greenplum Postgres 数据库中的几何列。

由于 PGNP 驱动程序在以正常方式尝试时出现奇怪的错误,我正在以迂回的方式进行操作。所以我正在做的是在 SQL Server 源上使用 GeogColumn.STAsText() 并将其插入到 Greenplum 数据库中的文本列中,然后运行一个任务,使用新插入的文本更新 Greenplum 表中的几何列,这应该例如看起来像POLYGON(-85 42, -86 43)

问题是 \\000 在每个字符之后添加,然后更新将不起作用。这是它的样子:

来源

目的地

如何阻止这种情况发生?

【问题讨论】:

  • \000 似乎是 NULL 字符,它将终止我记忆中的 C 天中的字符串。该数据可能在 SSIS 元数据中标记为 DT_IMAGE,是吗?在这种情况下,将不会使用数据查看器。我联系了一位使用 GIS 数据并在 SSIS 中这样做过的朋友,希望他能提供帮助。
  • 源和目的都是SSIS中的DT_NTEXT,我查了很多次。感谢您的帮助。
  • 我想知道这是否是问题所在。我想知道来自STAsText 的 nvarchar(max) 数据是否出于某种原因在其中获得了行终止符。或者它在转移中得到了加强。如果您尝试对图像类型进行显式转换,那会起作用还是会有所作为。因此CAST(GeogColumn.STAsText() AS image) AS imgColumn我想知道这是否会更好地处理 NUL。
  • 当我尝试 SSIS 说“不允许从数据类型 nvarchar(max) 到图像的显式转换。”
  • 试图获得最少的复制,至少从 SQL Server 复制到 SSIS。在这里或任何地方都没有可与之交谈的 Postgres。这似乎可以使它成为二进制文件。我的大脑意味着 varbinary(max) 但我的手指不遵守。 SELECT CAST(CAST(geometry::STGeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0),(2 2, 2 1, 1 1, 1 2, 2 2))', 0) AS geometry).STAsText() AS varbinary(max)) AS geo_bin

标签: sql-server postgresql ssis greenplum


【解决方案1】:

也许尝试以下方法(在您的 TSQL 源查询中):

,CAST(geogColumn.STAsText() as varchar(max)) AS WKT_TEXT 
,geogColumn.STAsBinary() AS WKB_IMAGE 

我会选择第二种口味,因为它应该更有效

不确定目标列需要在 PG 端,但我怀疑 TEXT 和 IMAGE

【讨论】:

  • 顺便说一句,我正在使用 PGNP 驱动程序,我必须不使用快速加载选项才能使其工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
相关资源
最近更新 更多