首页 > 解决方案 > 如何读取大txt文件并在PostgreSQL中添加数据?

问题描述

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

标签: c#postgresqlnpgsql

解决方案


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

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

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

编辑:也值得阅读COPY 上的 PostgreSQL 文档


推荐阅读