PostgreSQL heeft zeker een bulkkopie (het heet eigenlijk copy
), en het heeft een mooie wrapper voor .NET. Als u aan het laden bent, wilt u de NpgsqlCopyIn
. gebruiken , en als u gegevens extraheert, kunt u NpgsqlCopyOut.
. gebruiken
Uw vraag is een beetje vaag over details -- ik ken de velden in uw datatabel niet of iets over uw werkelijke database, dus neem dit als een kort voorbeeld van hoe u gegevens in bulk in een tabel kunt invoegen met 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();
-- Bewerk 27-8-2019 --
De constructie voor Npgsql is volledig veranderd. Hieronder is een standaardtekst voor hetzelfde voorbeeld hierboven, met behulp van binaire import (tekst is ook beschikbaar):
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();
}