sql >> Database >  >> RDS >> PostgreSQL

Bulk C#-gegevenstabel naar postgresql-tabel

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


  1. SQL-syntaxisprobleem en/of codeprobleem? Index viel buiten de grenzen van de array.

  2. Groeperen op vs Partitioneren op in Oracle

  3. Python:tuple-indexen moeten gehele getallen zijn, niet str bij het selecteren uit de mysql-tabel

  4. MySQL DATE-veld met standaard CURDATE(). NIET DATUM