如何在PostgreSQL中读取大型txt文件并添加数据?

时间:2018-08-21 10:07:46

标签: c# postgresql npgsql

我正在尝试从一个大约为的文件中读取大量数据。 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完全陌生。

1 个答案:

答案 0 :(得分:0)

您正在尝试使用原始二进制COPY,这要求您处理PostgreSQL有线格式的编码/解码...这绝对不是您想要的。

最简单的方法是使用text COPY,您可以在其中直接发送文本数据,并设置适当的列定界符(您似乎没有)。

要获得更好的性能,可以使用binary COPY(与 raw 二进制COPY不同)。这意味着您使用C#解析文件,然后使用API​​将数据发送到PostgreSQL。在这种情况下,由于您的数据完全是文本数据,因此与文本COPY可能不会有太大区别。

编辑:也值得阅读PostgreSQL docs on COPY