PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Bulk-C#-Datentabelle in Postgresql-Tabelle

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();
}