RepoDb.PostgreSql.BulkOperations
1.16.0-beta2
Prefix Reserved
dotnet add package RepoDb.PostgreSql.BulkOperations --version 1.16.0-beta2
NuGet\Install-Package RepoDb.PostgreSql.BulkOperations -Version 1.16.0-beta2
<PackageReference Include="RepoDb.PostgreSql.BulkOperations" Version="1.16.0-beta2" />
<PackageVersion Include="RepoDb.PostgreSql.BulkOperations" Version="1.16.0-beta2" />
<PackageReference Include="RepoDb.PostgreSql.BulkOperations" />
paket add RepoDb.PostgreSql.BulkOperations --version 1.16.0-beta2
#r "nuget: RepoDb.PostgreSql.BulkOperations, 1.16.0-beta2"
#:package RepoDb.PostgreSql.BulkOperations@1.16.0-beta2
#addin nuget:?package=RepoDb.PostgreSql.BulkOperations&version=1.16.0-beta2&prerelease
#tool nuget:?package=RepoDb.PostgreSql.BulkOperations&version=1.16.0-beta2&prerelease
RepoDb.PostgreSql.BulkOperations
A high-performant extension library of RepoDB that does bulk operations towards a PostgreSQL database. It uses PostgreSQL's native binary import protocol to load the data into the database.
The
BinaryBulk*methods are obsolete. Use theBulk*methods documented below instead — they replace theBinaryvariants one-for-one.
Important Pages
- GitHub Home — core library and source code.
- Website — full documentation, API reference, and blog.
Core Features
Community
- GitHub Issues — bug reports and feature requests.
- Microsoft Teams — live Q&A.
- X / Twitter — news and updates.
License
Apache-2.0 — Copyright © 2020 Michael Camara Pendon
Installation
Install-Package RepoDb.PostgreSql.BulkOperations
Then initialize the bootstrapper once at application startup:
RepoDb.PostgreSqlBootstrap.Initialize();
Async Methods
Every synchronous operation has a corresponding Async overload.
BulkInsert
Inserts a list of entities into the database in bulk. Returns the number of inserted rows.
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var insertedRows = connection.BulkInsert<Customer>(customers);
}
Or via table-name:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var insertedRows = connection.BulkInsert("Customer", customers);
}
Or via a DataTable:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var table = GetCustomersAsDataTable();
var insertedRows = connection.BulkInsert("Customer", table);
}
Returning generated identities:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers(); // Id not set
connection.BulkInsert<Customer>(customers, identityBehavior: PostgreSqlBulkImportIdentityBehavior.ReturnIdentity);
// customers[i].Id now holds the generated identity for each row
}
BulkMerge
Upserts a list of entities in bulk — inserts new rows and updates existing ones based on the defined qualifiers. Returns the number of affected rows.
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var mergedRows = connection.BulkMerge<Customer>(customers);
}
Or with qualifiers:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var mergedRows = connection.BulkMerge<Customer>(customers, qualifiers: e => new { e.LastName, e.DateOfBirth });
}
Or via table-name with qualifiers:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var mergedRows = connection.BulkMerge("Customer", customers, qualifiers: Field.From("LastName", "DateOfBirth"));
}
Or via a DataTable:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var table = GetCustomersAsDataTable();
var mergedRows = connection.BulkMerge("Customer", table);
}
BulkUpdate
Updates existing rows in the database in bulk, matched by the defined qualifiers. Returns the number of updated rows.
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var rows = connection.BulkUpdate<Customer>(customers);
}
Or with qualifiers:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var rows = connection.BulkUpdate<Customer>(customers, qualifiers: e => new { e.LastName, e.DateOfBirth });
}
Or via a DataTable:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var table = GetCustomersAsDataTable();
var rows = connection.BulkUpdate("Customer", table);
}
BulkDelete
Deletes existing rows from the database in bulk, matched by the defined qualifiers. Returns the number of deleted rows.
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var deletedRows = connection.BulkDelete<Customer>(customers);
}
Or with qualifiers:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var customers = GetCustomers();
var deletedRows = connection.BulkDelete<Customer>(customers, qualifiers: e => new { e.LastName, e.DateOfBirth });
}
Or via a DataTable:
using (var connection = new NpgsqlConnection(ConnectionString))
{
var table = GetCustomersAsDataTable();
var deletedRows = connection.BulkDelete("Customer", table);
}
BulkDeleteByKey
Deletes existing rows from the database in bulk, matched by their primary (or identity) key value alone — no entities or DataTable involved, just the list of key values to remove. Returns the number of deleted rows.
using (var connection = new NpgsqlConnection(ConnectionString))
{
var primaryKeys = new [] { 10045, 10046, 10047 };
var deletedRows = connection.BulkDeleteByKey("Customer", primaryKeys);
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- RepoDb (>= 1.16.0-beta1)
- RepoDb.PostgreSql (>= 1.16.0-beta2)
-
net8.0
- RepoDb (>= 1.16.0-beta1)
- RepoDb.PostgreSql (>= 1.16.0-beta2)
-
net9.0
- RepoDb (>= 1.16.0-beta1)
- RepoDb.PostgreSql (>= 1.16.0-beta2)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on RepoDb.PostgreSql.BulkOperations:
| Package | Downloads |
|---|---|
|
NBomber.Sinks.Timescale
NBomber sink that writes metrics data to TimescaleDB |
|
|
Fx.Data.SQL
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.16.0-beta2 | 83 | 8/15/2026 |
| 1.16.0-beta1 | 90 | 8/6/2026 |
| 1.16.0-alpha2 | 86 | 8/6/2026 |
| 1.16.0-alpha1 | 97 | 8/5/2026 |
| 1.15.0 | 500 | 7/18/2026 |
| 1.15.0-telemetry | 104 | 7/18/2026 |
| 1.14.0 | 7,840 | 6/28/2026 |
| 1.13.2-alpha1 | 1,591 | 2/26/2024 |
| 1.13.1 | 264,573 | 3/16/2023 |
| 1.13.0 | 2,737 | 11/2/2022 |
| 1.3.2-alpha1 | 229 | 2/26/2024 |
| 0.0.12 | 902 | 10/25/2022 |
| 0.0.11 | 863 | 10/6/2022 |
| 0.0.10 | 928 | 9/17/2022 |
| 0.0.1-alpha2 | 94 | 8/5/2026 |