PostgreSQL hat definitiv eine Massenkopie (sie heißt eigentlich copy
) und es hat einen netten Wrapper für .NET. Wenn Sie laden, möchten Sie NpgsqlCopyIn
verwenden , und wenn Sie Daten extrahieren, können Sie NpgsqlCopyOut.
verwenden
Ihre Frage ist in Bezug auf Details etwas vage - ich kenne die Felder in Ihrer Datentabelle oder etwas über Ihre tatsächliche Datenbank nicht. Nehmen Sie dies also als kurzes Beispiel zum Masseneinfügen von Daten in eine Tabelle mit 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();
-- Bearbeiten 27.08.2019 --
Das Konstrukt für Npgsql hat sich komplett geändert. Unten ist ein Musterbeispiel für das gleiche obige Beispiel unter Verwendung des Binärimports (Text ist ebenfalls verfügbar):
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();
}