c# - 如何读取大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 完全陌生。
解决方案
您正在尝试使用原始二进制 COPY,这需要您处理 PostgreSQL 有线格式的编码/解码......这绝对不是您想要的。
最简单的方法是使用text COPY,您可以在其中直接发送文本数据,设置正确的列分隔符(您似乎没有)。
为了获得更好的性能,您可以使用二进制 COPY(与原始二进制 COPY 不同)。这意味着您在 C# 中解析文件,然后使用 API 将数据发送到 PostgreSQL。在这种情况下,由于您的数据完全是文本的,因此您可能不会看到与文本 COPY 有很大的不同。
编辑:也值得阅读COPY 上的 PostgreSQL 文档。
推荐阅读
- php - 如何在 Mac 中完全卸载 Xampp-VM 7.2?
- powershell - Invoke-ASCmd cmdlet 输出到电子邮件正文
- c# - 在不使用接口的情况下进行模拟
- gradle - Gradle 在 intellij 中看不到任何依赖项
- qml - Bacon2D 与 QML 2D 游戏开发的准引擎
- php - 唯一字符串混淆mysql
- powershell - 监控windows甚至log
- javascript - 根据 PC 上的日期,使用 javascript 在日历上突出显示日期
- excel - 如果相邻单元格值与列名匹配,则 Excel VBA 在列下插入行
- asp.net - Roslyn msWorkspace.OpenSolutionAsync() 不打开网站项目