我正在尝试从一个大约为的文件中读取大量数据。 20MB到50MB,然后将其数据添加到Postgres表中。下面是我使用过的代码,但出现错误。
## test.txt##
a1
a2
a3
a4
a5
a6
a7
a8
a9
using (Stream fileStream = new FileStream(@"D:\test.txt", FileMode.Open, FileAccess.Read))
{
using (var reader = new BinaryReader(fileStream))
{
reader.Read(buffer, 0, buffer.Length - 10);
// Import data array into table2
using (var outStream =
conn.BeginRawBinaryCopy("COPY veda_front_end.table3(field1) FROM STDIN binary"))
{
outStream.Write(buffer, 0, buffer.Length);
}
}
}
22P04:无法识别COPY文件签名
我不确定是否编写了正确的代码。我对文件流和NpgSQL完全陌生。
答案 0 :(得分:0)
您正在尝试使用原始二进制COPY,这要求您处理PostgreSQL有线格式的编码/解码...这绝对不是您想要的。
最简单的方法是使用text COPY,您可以在其中直接发送文本数据,并设置适当的列定界符(您似乎没有)。
要获得更好的性能,可以使用binary COPY(与 raw 二进制COPY不同)。这意味着您使用C#解析文件,然后使用API将数据发送到PostgreSQL。在这种情况下,由于您的数据完全是文本数据,因此与文本COPY可能不会有太大区别。
编辑:也值得阅读PostgreSQL docs on COPY。