.NET Aspire PostgreSQL integrering
omfattar:Webbhotellintegration och Client integrering
PostgreSQL är ett kraftfullt objektrelationssystem med öppen källkod med många års aktiv utveckling som har gett det ett starkt rykte för tillförlitlighet, funktions robusthet och prestanda. Med integreringen .NET AspirePostgreSQL kan du ansluta till befintliga PostgreSQL databaser eller skapa nya instanser från .NET med docker.io/library/postgres
containeravbildningen.
Värdintegrering
PostgreSQL:s värdintegrering modellerar en PostgreSQLserver som en PostgresServerResource-typ. För att komma åt den här typen och API:er som gör att du kan lägga till den i ditt 📦Aspire.Hosting.PostgreSQL NuGet-paket i projektet för appvärd.
dotnet add package Aspire.Hosting.PostgreSQL
Mer information finns i dotnet add package eller i Hantera paketberoenden i .NET-applikationer.
Lägg till PostgreSQLserver resurs
I appvärdprojektet anropar du AddPostgres på builder
-instansen för att lägga till en PostgreSQLserver resurs och anropar sedan AddDatabase på postgres
-instansen för att lägga till en databasresurs enligt följande exempel:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
När .NET.NET Aspire lägger till en containeravbildning till appvärden, som du ser i föregående exempel med docker.io/library/postgres
avbildningen, skapas en ny PostgreSQLserver instans på den lokala datorn. En referens till din PostgreSQLserver och din PostgreSQL databasinstans (postgresdb
-variabeln) används för att lägga till ett beroende i ExampleProject
. Den PostgreSQLserver resursen innehåller standardautentiseringsuppgifter med en username
av "postgres"
och slumpmässigt genererade password
med hjälp av metoden CreateDefaultPasswordParameter.
Metoden WithReference konfigurerar en anslutning i ExampleProject
med namnet "messaging"
. Mer information finns i Livscykel för containerresurser.
Tips
Om du hellre vill ansluta till en befintlig PostgreSQLserveranropar du AddConnectionString i stället. Mer information finns i Referera till befintliga resurser.
Lägg till PostgreSQL pgAdmin-resurs
När du lägger till PostgreSQL resurser i builder
med metoden AddPostgres
kan du länka anrop till WithPgAdmin
för att lägga till containern dpage/pgadmin4. Den här containern är en plattformövergripande client för PostgreSQL databaser som hanterar en webbaserad administratörspanel. Tänk på följande exempel:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgAdmin();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Den följande koden lägger till en container baserad på docker.io/dpage/pgadmin4
-bilden. Containern används för att hantera PostgreSQLserver- och databasresurserna. Metoden WithPgAdmin
lägger till en container som hanterar en webbaserad administratörsinstrumentpanel för PostgreSQL databaser.
Lägg till PostgreSQL pgWeb-resurs
När du lägger till PostgreSQL resurser i builder
med metoden AddPostgres
kan du länka anrop till WithPgWeb
för att lägga till sosedoff/pgweb container. Den här containern är en plattformsoberoende client för PostgreSQL databaser som tillhandahåller en webbaserad administrationspanel. Tänk på följande exempel:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithPgWeb();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Följande kod lägger till en container baserad på docker.io/sosedoff/pgweb
avbild. Alla registrerade PostgresDatabaseResource-instanser används för att skapa en konfigurationsfil per instans. Varje konfiguration är bunden till katalogen för pgweb containerbokmärken. Mer information finns i PgWeb-dokument: Server anslutningsbokmärken.
Lägga till PostgreSQLserver resurs med datavolym
Om du vill lägga till en datavolym i den PostgreSQLserver resursen anropar du metoden WithDataVolume på den PostgreSQLserver resursen:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithDataVolume(isReadOnly: false);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Datavolymen används för att bevara PostgreSQLserver data utanför containerns livscykel. Datavolymen monteras på sökvägen /var/lib/postgresql/data
i PostgreSQLserver-containern, och när name
-parametern inte anges genereras namnet slumpmässigt. Mer information om datavolymer och detaljer om varför de föredras framför bindmountsfinns i Docker dokumentation: Volymer.
Lägg till PostgreSQLserver resurs med databindningsmontering
Om du vill lägga till en databindningsmontering till den PostgreSQLserver resursen anropar du metoden WithDataBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithDataBindMount(
source: @"C:\PostgreSQL\Data",
isReadOnly: false);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Viktig
Data bindningsmonteringar har begränsade funktioner jämfört med volymer, vilket ger bättre prestanda, portabilitet och säkerhet, vilket gör dem mer lämpliga för produktionsmiljöer. Bindningsmonteringar tillåter dock direkt åtkomst och ändring av filer i värdsystemet, perfekt för utveckling och testning där realtidsändringar behövs.
Databindningsmonteringar förlitar sig på värddatorns filsystem för att bevara PostgreSQLserver data mellan omstarter av containrar. Databindningens monteringspunkt monteras på sökvägen C:\PostgreSQL\Data
i Windows (eller /PostgreSQL/Data
på Unix) på värddatorn i PostgreSQLserver-containern. Mer information om databindningspunkter finns i Docker dokumentationen: Bindningspunkter.
Lägg till PostgreSQLserver resurs med init-bindmontering
För att lägga till en init-bindmontering till resursen PostgreSQLserver, anropa metoden WithInitBindMount:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithInitBindMount(@"C:\PostgreSQL\Init");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Init-bindningen förlitar sig på värddatorns filsystem för att initiera PostgreSQLserver-databasen med containrarnas init--mapp. Den här mappen används för initiering, körning av körbara gränssnittsskript eller .sql kommandofiler när mappen postgres-data har skapats. Init-bindningsmonteringen monteras på sökvägen C:\PostgreSQL\Init
i Windows (eller /PostgreSQL/Init
på Unix) på värddatorn i PostgreSQLserver-containern.
Lägga till PostgreSQLserver resurs med parametrar
När du uttryckligen vill ange användarnamnet och lösenordet som används av containeravbildningen kan du ange dessa autentiseringsuppgifter som parametrar. Tänk dig följande alternativa exempel:
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("username", secret: true);
var password = builder.AddParameter("password", secret: true);
var postgres = builder.AddPostgres("postgres", username, password);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
// After adding all resources, run the app...
Mer information om hur du tillhandahåller parametrar finns i Externa parametrar.
Hosting för integrationskontroller
PostgreSQL värdintegrering lägger automatiskt till en hälsokontroll för den PostgreSQLserver resursen. Hälsokontrollen bekräftar att PostgreSQLserver är i drift och att det går att upprätta en anslutning till det.
Integreringen av värdtjänst förlitar sig på 📦 AspNetCore.HealthChecks.Npgsql NuGet-paketet.
Client integrering
Kom igång med .NET AspirePostgreSQLclient-integreringen genom att installera 📦Aspire. Npgsql NuGet-paketet i det client-förbrukande projektet, dvs. projektet för det program som använder PostgreSQLclient. PostgreSQL client-integreringen registrerar en NpgsqlDataSource- instans som du kan använda för att interagera med PostgreSQL.
dotnet add package Aspire.Npgsql
Lägg till Npgsql-client
I Program.cs-filen för ditt client-förbrukande projekt anropar du AddNpgsqlDataSource-tilläggsmetoden på valfri IHostApplicationBuilder för att registrera en NpgsqlDataSource
för användning via beroendeinjektionsbehållaren. Metoden tar en parameter för anslutningsnamn.
builder.AddNpgsqlDataSource(connectionName: "postgresdb");
Tips
Parametern connectionName
måste matcha namnet som används när du lägger till PostgreSQLserver-resursen i appvärdprojektet. För mer information, se Lägg till PostgreSQLserver resurs.
När du har lagt till NpgsqlDataSource
i byggaren kan du hämta NpgsqlDataSource
-instansen med hjälp av dependency injection. Om du till exempel vill hämta datakällobjektet från en exempeltjänst definierar du det som en konstruktorparameter och kontrollerar att klassen ExampleService
är registrerad med containern för beroendeinmatning:
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
Mer information om beroendeinmatning finns i .NET beroendeinmatning.
Lägg till nyckelade Npgsql-client
Det kan finnas situationer där du vill registrera flera NpgsqlDataSource
instanser med olika anslutningsnamn. Om du vill registrera nyckelade Npgsql-klienter anropar du metoden AddKeyedNpgsqlDataSource:
builder.AddKeyedNpgsqlDataSource(name: "chat");
builder.AddKeyedNpgsqlDataSource(name: "queue");
Sedan kan du hämta NpgsqlDataSource
-instans genom dependency injection. Om du till exempel vill hämta anslutningen från en exempeltjänst:
public class ExampleService(
[FromKeyedServices("chat")] NpgsqlDataSource chatDataSource,
[FromKeyedServices("queue")] NpgsqlDataSource queueDataSource)
{
// Use data sources...
}
Mer information om nyckeltjänster finns i .NET beroendeinjektion: Nyckeltjänster.
Konfiguration
Den .NET AspirePostgreSQL integreringen innehåller flera konfigurationsmetoder och alternativ för att uppfylla kraven och konventionerna i ditt projekt.
Använda en anslutningssträng
När du använder en anslutningssträng från ConnectionStrings
-konfigurationsavsnittet kan du ange namnet på anslutningssträngen när du anropar metoden AddNpgsqlDataSource:
builder.AddNpgsqlDataSource("postgresdb");
Sedan hämtas anslutningssträngen från ConnectionStrings
-konfigurationsavsnittet:
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=postgresdb"
}
}
Mer information finns i ConnectionString.
Använda konfigurationsprovidrar
.NET Aspire
PostgreSQL-integreringen stöder Microsoft.Extensions.Configuration. Den läser in NpgsqlSettings från appsettings.json eller andra konfigurationsfiler med hjälp av Aspire:Npgsql
-nyckeln. Exempel appsettings.json som konfigurerar några av alternativen:
I följande exempel visas en appsettings.json fil som konfigurerar några av de tillgängliga alternativen:
{
"Aspire": {
"Npgsql": {
"ConnectionString": "Host=myserver;Database=postgresdb",
"DisableHealthChecks": false,
"DisableTracing": true,
"DisableMetrics": false
}
}
}
Det fullständiga PostgreSQLclient integrationsschemat JSON finns i Aspire. Npgsql/ConfigurationSchema.json.
Använd inline-delegater
Du kan också skicka Action<NpgsqlSettings> configureSettings
ombud för att konfigurera vissa eller alla alternativ infogade, till exempel för att inaktivera hälsokontroller:
builder.AddNpgsqlDataSource(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Hälsokontroller
Som standard aktiverar .NET.NET Aspire integreringar hälsokontroller för alla tjänster. Mer information finns i översikten över .NET.NET Aspire integreringar.
- Lägger till
NpgSqlHealthCheck
, som verifierar att kommandon kan köras mot den underliggande Postgres Database. - Integrerar med HTTP-slutpunkten
/health
, som anger att alla registrerade hälsokontroller måste godkännas för att appen ska anses vara redo att ta emot trafik.
Observerbarhet och telemetri
.NET .NET Aspire integreringar ställer automatiskt in konfigurationer för loggning, spårning och mått, som ibland kallas grundpelarna för observerbarhet. Mer information om integreringsobservabilitet och telemetri finns i översikten över .NET.NET Aspire integreringar. Beroende på säkerhetskopieringstjänsten kanske vissa integreringar bara stöder vissa av dessa funktioner. Vissa integreringar stöder till exempel loggning och spårning, men inte mått. Telemetrifunktioner kan också inaktiveras med hjälp av de tekniker som visas i avsnittet Configuration.
Skogsavverkning
.NET Aspire PostgreSQL-integreringen använder följande loggkategorier:
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
Spårning
Integreringen .NET AspirePostgreSQL genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:
Npgsql
Mätvärden
Integreringen .NET AspirePostgreSQL genererar följande mått med hjälp av OpenTelemetry:
- Npgsql:
ec_Npgsql_bytes_written_per_second
ec_Npgsql_bytes_read_per_second
ec_Npgsql_commands_per_second
ec_Npgsql_total_commands
ec_Npgsql_current_commands
ec_Npgsql_failed_commands
ec_Npgsql_prepared_commands_ratio
ec_Npgsql_connection_pools
ec_Npgsql_multiplexing_average_commands_per_batch
ec_Npgsql_multiplexing_average_write_time_per_batch
Azure PostgreSQL värdintegrering
För att distribuera dina PostgreSQL-resurser till Azure, installera 📦Aspire.Hosting.Azure.PostgreSQL NuGet-paket:
dotnet add package Aspire.Hosting.Azure.PostgreSQL
Lägg till AzurePostgreSQLserver resurs
När du har installerat .NET AspireAzurePostgreSQL värdintegrering anropar du AddAzurePostgresFlexibleServer
-tilläggsmetoden i appvärdprojektet:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Föregående anrop till AddAzurePostgresFlexibleServer
konfigurerar PostgresSQL-server resursen som ska distribueras som en AzurePostgres flexibel Server.
Viktig
Som standard konfigurerar AddAzurePostgresFlexibleServer
Microsoft Entra-ID autentisering. Detta kräver ändringar i program som behöver ansluta till dessa resurser. Mer information finns i Client integration.
Lägg till Azure autentiserade Npgsql-client
När du anropar AddAzurePostgresFlexibleServer
i din PostgreSQL värdintegrering konfigureras som standard 📦Azure. Identitet NuGet-paket för att aktivera autentisering:
dotnet add package Azure.Identity
Den PostgreSQL anslutningen kan användas med hjälp av client integrering och Azure.Identity
:
builder.AddNpgsqlDataSource(
"postgresdb",
configureDataSourceBuilder: (dataSourceBuilder) =>
{
if (!string.IsNullOrEmpty(dataSourceBuilder.ConnectionStringBuilder.Password))
{
return;
}
dataSourceBuilder.UsePeriodicPasswordProvider(async (_, ct) =>
{
var credentials = new DefaultAzureCredential();
var token = await credentials.GetTokenAsync(
new TokenRequestContext([
"https://ossrdbms-aad.database.windows.net/.default"
]), ct);
return token.Token;
},
TimeSpan.FromHours(24),
TimeSpan.FromSeconds(10));
});
Föregående kodfragment visar hur du använder klassen DefaultAzureCredential från Azure.Identity-paketet för att autentisera med Microsoft Entra-ID och hämta en token för att ansluta till PostgreSQL-databasen. Metoden UsePeriodicPasswordProvider används för att tillhandahålla token till anslutningssträngsbyggaren.
Se även
.NET Aspire