Npsql在windows托管的postgres时间刻度服务器上超时二进制导入(复制二进制)
您好,我在执行对windows上托管的postgres timescale服务器的复制二进制调用时遇到问题。复制二进制操作被抽象为.Net的NpSql库中的binaryimport 在开发过程中,我使用了一个docker容器来运行timescale db的docker映像,它工作得非常好,但是在尝试在windows上部署postgres之后,我遇到了很多问题 我能够启动复制操作并精确复制72539行。数据以块的形式从外部api收集,在添加新行之间可能会有暂停,因为某些调用可能不会返回任何数据。windows防火墙是否可能因为这些暂停而关闭连接?如果是这样,我该如何缓解这种情况 下面是我的应用程序的stacktrace和postgres服务器的日志:Npsql在windows托管的postgres时间刻度服务器上超时二进制导入(复制二进制),windows,postgresql,.net-core,timescaledb,Windows,Postgresql,.net Core,Timescaledb,您好,我在执行对windows上托管的postgres timescale服务器的复制二进制调用时遇到问题。复制二进制操作被抽象为.Net的NpSql库中的binaryimport 在开发过程中,我使用了一个docker容器来运行timescale db的docker映像,它工作得非常好,但是在尝试在windows上部署postgres之后,我遇到了很多问题 我能够启动复制操作并精确复制72539行。数据以块的形式从外部api收集,在添加新行之间可能会有暂停,因为某些调用可能不会返回任何数据。w
Npgsql.NpgsqlException (0x80004005): Exception while writing to stream
---> System.TimeoutException: Timeout during writing attempt
at Npgsql.NpgsqlWriteBuffer.Flush(Boolean async, CancellationToken cancellationToken)
at Npgsql.TypeHandling.NpgsqlSimpleTypeHandler`1.<>c__DisplayClass12_0`1.<<WriteWithLengthInternal>g__WriteWithLengthLong|0>d.MoveNext()
--- End of stack trace from previous location ---
at Npgsql.NpgsqlBinaryImporter.Write[T](T value, NpgsqlParameter param, Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlBinaryImporter.WriteRow(Boolean async, CancellationToken cancellationToken, Object[] values)
我相信我找到了解决问题的办法。该操作运行时间很长,中间有一些停顿。这似乎会导致windows在一段时间后关闭tcp连接。因此,我必须在连接字符串中使用
Tcp Keepalive
参数来防止windows关闭连接()
2021-05-25 08:33:33.422 CEST [27136] ERROR: unexpected EOF on client connection with an open transaction
2021-05-25 08:33:33.422 CEST [27136] CONTEXT: COPY tag_log, line 72539, column log_value
2021-05-25 08:33:33.422 CEST [27136] STATEMENT: COPY tag_log
(tag_id, log_ts, log_value)
FROM STDIN (FORMAT BINARY)
2021-05-25 08:33:33.429 CEST [27136] FATAL: terminating connection because protocol synchronization was lost
2021-05-25 08:33:33.430 CEST [27136] LOG: could not send data to client: An established connection was aborted by the software in your host machine.