O PostgreSQL definitivamente tem uma cópia em massa (na verdade é chamada de
copy
), e tem um bom wrapper para .NET. Se estiver carregando, você deseja usar o NpgsqlCopyIn
, e se você estiver extraindo dados, você pode usar NpgsqlCopyOut.
Sua pergunta é um pouco vaga em detalhes - eu não conheço os campos em sua tabela de dados ou nada sobre seu banco de dados real, então tome isso como um breve exemplo de como inserir dados em massa em uma tabela usando 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();
-- Editado 27/08/2019 --
A construção do Npgsql mudou completamente. Abaixo está um clichê para o mesmo exemplo acima, usando importação binária (texto também está disponível):
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();
}