Nano.Data.PostgreSQL
10.0.0-preview1
See the version list below for details.
dotnet add package Nano.Data.PostgreSQL --version 10.0.0-preview1
NuGet\Install-Package Nano.Data.PostgreSQL -Version 10.0.0-preview1
<PackageReference Include="Nano.Data.PostgreSQL" Version="10.0.0-preview1" />
<PackageVersion Include="Nano.Data.PostgreSQL" Version="10.0.0-preview1" />
<PackageReference Include="Nano.Data.PostgreSQL" />
paket add Nano.Data.PostgreSQL --version 10.0.0-preview1
#r "nuget: Nano.Data.PostgreSQL, 10.0.0-preview1"
#:package Nano.Data.PostgreSQL@10.0.0-preview1
#addin nuget:?package=Nano.Data.PostgreSQL&version=10.0.0-preview1&prerelease
#tool nuget:?package=Nano.Data.PostgreSQL&version=10.0.0-preview1&prerelease
Nano.Data.PostgreSQL
PostgreSQL data provider for Nano applications._
Table of Contents
Summary
Data Provider implementation for PostgreSQL data access.
📖 Learn more about Nano Data. 📖 Learn more about Nano Azure PostgreSQL.
Try it out yourself using the Api.Data.PostgreSQL, or Console.Data.PostgreSQL example.
Registration
Install the Nano.Data.PostgreSQL NuGet package.
dotnet add package Nano.Data.PostgreSQL;
Register the PostgreSqlProvider provider during application startup in the ConfigureServices(...) method.
.ConfigureServices(services =>
{
services
.AddNanoData<PostgreSqlProvider, TContext>();
})
A BaseDbContext and BaseDbContextFactory must also be implemented and used as TContext, and also an initial migration added.
dotnet ef migrations add Initial --project {project-name}
Configuration
Add the data configuration to appsettings.json.
"Data": {
"BatchSize": 25,
"BulkBatchSize": 500,
"BulkBatchDelay": 1000,
"QueryRetryCount": 0,
"UseLazyLoading": false,
"StartupAction": "None",
"UseSensitiveDataLogging": false,
"QuerySplittingBehavior": "SingleQuery",
"DefaultCollation": null,
"ConnectionString": null,
"Repository": {
"UseAutoSave": false,
"QueryIncludeDepth": 4
},
"Identity": null,
"ConnectionPool": null,
"HealthCheck": {
"UnhealthyStatus": "Unhealthy"
}
}
...and appsettings.Development.json
"Data": {
"UseMigrateDatabase": true,
"ConnectionString": "Host=host.docker.internal;Port=5432;Database=nanoDb;Username=sa;Password=myPassword_123"
}
Docker Compose
Add PostgreSQL as a service dependency in docker-compose.yml.
services:
{service-name}:
depends_on:
- database
database:
image: postgis/postgis:latest
ports:
- 5432:5432
networks:
- network
environment:
POSTGRES_USER: sa
POSTGRES_PASSWORD: myPassword_123
POSTGRES_DB: nanoDb
Kubernetes
Add the %SERVICE_NAME%-secret for the connectionstring to the deployment.yaml.
spec:
template:
spec:
containers:
env:
- name: Data__ConnectionString
valueFrom:
secretKeyRef:
name: %SERVICE_NAME%-data-secret
key: data-connectionstring
GitHub Actions
Add the following environment variables to the buid-and-deply.yml.
env:
DATA_HOST: ${{ github.ref == 'refs/heads/master' && secrets.PRODUCTION_POSTGRE_HOST || secrets.STAGING_POSTGRE_HOST }}
DATA_NAME: nanoDb
DATA_USER: api-data-postgre-user
DATA_PASSWORD: ${{ github.ref == 'refs/heads/master' && secrets.PRODUCTION_POSTGRE_NANO_DB_PASSWORD || secrets.STAGING_POSTGRE_NANO_DB_PASSWORD }}
DATA_ADMIN_USER: ${{ github.ref == 'refs/heads/master' && secrets.PRODUCTION_POSTGRE_ADMIN_USER || secrets.STAGING_POSTGRE_ADMIN_USER }}
DATA_ADMIN_PASSWORD: ${{ github.ref == 'refs/heads/master' && secrets.PRODUCTION_POSTGRE_ADMIN_PASSWORD || secrets.STAGING_POSTGRE_ADMIN_PASSWORD }}
DATA_CONNECTIONSTRING: Host=${{ env.DATA_HOST }};Port=${{ vars.DATA_POSTGRE_PORT }};Database=${{ env.DATA_NAME }};Username=${{ env.DATA_USER }};Password=${{ env.DATA_PASSWORD }};SSL Mode=Prefer;Trust Server Certificate=true
DATA_MIGRATION_CONNECTIONSTRING: Host=${{ env.DATA_HOST }};Port=${{ vars.DATA_POSTGRE_PORT }};Database=${{ env.DATA_NAME }};Username=${{ env.DATA_ADMIN_USER }};Password=${{ env.DATA_ADMIN_PASSWORD }};SSL Mode=Prefer;Trust Server Certificate=true
Additionally, this step has been added to ensure database migrations are applied, and the application database user has been created before the application is deployed.
- name: Database Migration
shell: pwsh
run: |
dotnet ef database update `
--no-build `
--startup-project $env:APP_NAME `
--connection "$env:DATA_MIGRATION_CONNECTIONSTRING" `;
if ($LastExitCode -ne 0)
{
throw "error";
};
sudo apt-get update
sudo apt-get install -y postgresql-client
$userExists = psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=postgres" `
-tAc "SELECT 1 FROM pg_roles WHERE rolname='$env:DATA_USER';"
if ($userExists -ne "1")
{
psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=postgres" `
-c "CREATE ROLE $env:DATA_USER WITH LOGIN PASSWORD '$env:DATA_PASSWORD';"
}
$userDbExists = psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=$env:DATA_NAME" `
-tAc "SELECT 1 FROM pg_roles WHERE rolname='$env:DATA_USER';"
if ($userDbExists -ne "1")
{
psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=$env:DATA_NAME" `
-c "GRANT CONNECT ON DATABASE $env:DATA_NAME TO $env:DATA_USER;"
psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=$env:DATA_NAME" `
-c "GRANT USAGE ON SCHEMA public TO $env:DATA_USER;"
psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=$env:DATA_NAME" `
-c "GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO $env:DATA_USER;"
psql "host=$env:DATA_HOST port=$env:DATA_POSTGRE_PORT user=$env:DATA_ADMIN_USER password=$env:DATA_ADMIN_PASSWORD dbname=$env:DATA_NAME" `
-c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO $env:DATA_USER;"
}
Last, the application connectionstring must be added in a secret in Kubernetes in the Kubernetes Deploy step.
sudo kubectl create secret generic $env:SERVICE_NAME-data-secret ` --from-literal=data-connectionstring=$env:DATA_CONNECTIONSTRING --save-config --dry-run=client -o yaml | sudo kubectl apply -f -;
if ($LastExitCode -ne 0)
{
throw "error";
};
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- AspNetCore.HealthChecks.NpgSql (>= 9.0.0)
- Nano.Data (>= 10.0.0-preview1)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.1)
- Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite (>= 10.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Nano.Data.PostgreSQL:
| Package | Downloads |
|---|---|
|
Nano.All
This package is part of the Nano Library, a set of reusable .NET libraries for building microservice applications. Nano addresses common non-business concerns such as logging, persistence, messaging, validation, and documentation, while remaining fully configurable and extensible, so applications can stay focused on business logic. See https://github.com/Nano-Core/Nano.Library for details. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0-preview2 | 64 | 4/25/2026 |
| 10.0.0-preview1 | 68 | 4/24/2026 |
- .NET 10 support.
- Comprehensive rewrite with performance optimizations, improvements, and bug fixes.
- Not compatible with previous versions of Nano.