PostgreSQL har definitivt en bulkkopia (det heter faktiskt copy
), och den har ett fint omslag för .NET. Om du laddar, vill du använda NpgsqlCopyIn
, och om du extraherar data kan du använda NpgsqlCopyOut.
Din fråga är lite vag när det gäller detaljer -- jag känner inte till fälten i din datatabell eller något om din faktiska databas, så ta detta som ett kort exempel på hur man bulkinfogar data i en tabell med 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();
-- Redigera 27/8/2019 --
Konstruktionen för Npgsql har helt förändrats. Nedan finns en planlösning för samma exempel ovan, med binär import (text finns också):
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();
}