PostgreSQL rozhodně má hromadnou kopii (ve skutečnosti se nazývá copy
) a má pěkný obal pro .NET. Pokud načítáte, chcete použít NpgsqlCopyIn
a pokud extrahujete data, můžete použít NpgsqlCopyOut.
Vaše otázka je v detailech trochu vágní – neznám pole ve vaší datové tabulce ani nic o vaší skutečné databázi, takže to berte jako stručný příklad hromadného vkládání dat do tabulky pomocí C#/PostgreSQL:
NpgsqlCopyIn copy = new NpgsqlCopyIn("copy table1 from STDIN WITH NULL AS '' CSV;",
conn);
copy.Start();
NpgsqlCopySerializer cs = new NpgsqlCopySerializer(conn);
cs.Delimiter = ",";
foreach (var record in RecordList)
{
cs.AddString(record.UserId);
cs.AddInt32(record.Age);
cs.AddDateTime(record.HireDate);
cs.EndRow();
}
cs.Close();
copy.End();
-- Upravit 27. 8. 2019 --
Konstrukce pro Npgsql se zcela změnila. Níže je uveden popis stejného příkladu výše s použitím binárního importu (k dispozici je také text):
using (var writer = conn.BeginBinaryImport(
"copy user_data.part_list from STDIN (FORMAT BINARY)"))
{
foreach (var record in RecordList)
{
writer.StartRow();
writer.Write(record.UserId);
writer.Write(record.Age, NpgsqlTypes.NpgsqlDbType.Integer);
writer.Write(record.HireDate, NpgsqlTypes.NpgsqlDbType.Date);
}
writer.Complete();
}