在Azure ADF v2管道中,我正在尝试将数据从sql服务器复制到Azure postgresql数据库。我的源是sql服务器,我的接收器是Azure postgresql数据库。我正在将所有记录从源表移动到目标表。但是,在管道执行时出现错误
"错误代码": "2200", "消息": "'type=npgsql.postgresexception,message=08p01: 无效的消息格式'", "failuretype": "usererror.
问题出在哪里?
"errorcode": "2200", "message": "'type=npgsql.postgresexception,message=08p01:无效消息 format'", "failuretype": "usererror.
您可能会在这个旧案例中找到一些类似于错误跟踪的线索。请参阅上述链接中的解决方案:https://github.com/npgsql/npgsql/issues/189#issuecomment-67001166
基本上,如果我们尝试使用 Npgsql 持久化的字符串值是 派生自 MemoryStream.GetBuffer(( 它会爆炸,但如果它来了 从 MemoryStream.ToArray(( 它将正常工作。
官方文件解释道:
请注意,缓冲区包含可能未使用的已分配字节。例如,如果将字符串"test"写入 MemoryStream 对象,则从 GetBuffer 返回的缓冲区长度为 256,而不是 4,其中 252 字节未使用。若要仅获取缓冲区中的数据,请使用 ToArray 方法;但是,ToArray 会在内存中创建数据的副本。
目前,作为解决方法,您可以使用csv文件作为中介。将数据从 SQL Server 传输到 Azure Blob 存储中的 csv 文件。然后将数据传输到目标 postgresql 数据库。
我自己遇到了这个问题。您需要根据我在这里的回答将"写入批量大小"从 1000 更改为较小的值(例如 1000(。 https://stackoverflow.com/a/58558726/10393844