PostgreSQLには間違いなくバルクコピーがあります(実際にはcopy
と呼ばれます) )、そしてそれは.NETのための素晴らしいラッパーを持っています。ロードする場合は、NpgsqlCopyIn
を使用します 、データを抽出する場合は、NpgsqlCopyOut.
を使用できます。
あなたの質問は詳細について少し曖昧です-私はあなたのデータテーブルのフィールドや実際のデータベースについて何も知らないので、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();
-2019年8月27日編集-
Npgsqlの構成が完全に変更されました。以下は、バイナリインポートを使用した上記と同じ例の定型文です(テキストも利用可能です):
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();
}