# AzurePostgresExtensions Methods

- Package: [Aspire.Hosting.Azure.PostgreSQL](/reference/api/csharp/aspire.hosting.azure.postgresql.md)
- Type: [AzurePostgresExtensions](/reference/api/csharp/aspire.hosting.azure.postgresql/azurepostgresextensions.md)
- Kind: `Methods`
- Members: `8`

Provides extension methods for adding the Azure PostgreSQL resources to the application model.

## AddAzurePostgresFlexibleServer(IDistributedApplicationBuilder, string)

- Name: `AddAzurePostgresFlexibleServer(IDistributedApplicationBuilder, string)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<AzurePostgresFlexibleServerResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L143-L151)

Adds an Azure PostgreSQL Flexible Server resource to the application model.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<AzurePostgresFlexibleServerResource> AddAzurePostgresFlexibleServer(
        this IDistributedApplicationBuilder builder,
        string name)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IDistributedApplicationBuilder`)
  The builder for the distributed application.
- `name` (`string`)
  The name of the resource.

## Returns

`IResourceBuilder<AzurePostgresFlexibleServerResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1` builder.

## Remarks

By default, the Azure PostgreSQL Flexible Server resource is configured to use Microsoft Entra ID (Azure Active Directory) for authentication. This requires changes to the application code to use an azure credential to authenticate with the resource. See https://learn.microsoft.com/azure/postgresql/flexible-server/how-to-connect-with-managed-identity#connect-using-managed-identity-in-c for more information. You can use the [AzurePostgresExtensions.WithPasswordAuthentication(IResourceBuilder<AzurePostgresFlexibleServerResource>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)](/reference/api/csharp/aspire.hosting.azure.postgresql/azurepostgresextensions/methods.md#withpasswordauthentication-iresourcebuilder-azurepostgresflexibleserverresource-iresourcebuilder-parameterresource-iresourcebuilder-parameterresource) method to configure the resource to use password authentication. The following example creates an Azure PostgreSQL Flexible Server resource and referencing that resource in a .NET project.

```csharp
var builder = DistributedApplication.CreateBuilder(args);

var data = builder.AddAzurePostgresFlexibleServer("data");

builder.AddProject<Projects.ProductService>()
    .WithReference(data);

builder.Build().Run();
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## AddDatabase(IResourceBuilder<AzurePostgresFlexibleServerResource>, string, string?)

- Name: `AddDatabase(IResourceBuilder<AzurePostgresFlexibleServerResource>, string, string?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L164-L187)

Adds an Azure PostgreSQL database to the application model.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource> AddDatabase(
        this IResourceBuilder<AzurePostgresFlexibleServerResource> builder,
        string name,
        string? databaseName = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<AzurePostgresFlexibleServerResource>`)
  The Azure PostgreSQL server resource builder.
- `name` (`string`)
  The name of the resource. This name will be used as the connection string name when referenced in a dependency.
- `databaseName` (`string?`) `optional`
  The name of the database. If not provided, this defaults to the same value as `name`.

## Returns

`IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1`.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## AsAzurePostgresFlexibleServer(IResourceBuilder<PostgresServerResource>)

> **Obsolete:** This method is obsolete and will be removed in a future version. Use AddAzurePostgresFlexibleServer instead to add an Azure PostgreSQL Flexible Server resource.

- Name: `AsAzurePostgresFlexibleServer(IResourceBuilder<PostgresServerResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<PostgresServerResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L112)

Configures resource to use Azure for local development and when doing a deployment via the Azure Developer CLI.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<PostgresServerResource> AsAzurePostgresFlexibleServer(
        this IResourceBuilder<PostgresServerResource> builder)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<PostgresServerResource>`)
  The `ApplicationModel.IResourceBuilder`1` builder.

## Returns

`IResourceBuilder<PostgresServerResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1` builder.

## PublishAsAzurePostgresFlexibleServer(IResourceBuilder<PostgresServerResource>)

> **Obsolete:** This method is obsolete and will be removed in a future version. Use AddAzurePostgresFlexibleServer instead to add an Azure PostgreSQL Flexible Server resource.

- Name: `PublishAsAzurePostgresFlexibleServer(IResourceBuilder<PostgresServerResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<PostgresServerResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L103)

Configures Postgres Server resource to be deployed as Azure PostgreSQL Flexible Server.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<PostgresServerResource> PublishAsAzurePostgresFlexibleServer(
        this IResourceBuilder<PostgresServerResource> builder)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<PostgresServerResource>`)
  The `ApplicationModel.IResourceBuilder`1` builder.

## Returns

`IResourceBuilder<PostgresServerResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1` builder.

## RunAsContainer(IResourceBuilder<AzurePostgresFlexibleServerResource>, Action<IResourceBuilder<PostgresServerResource>>)

- Name: `RunAsContainer(IResourceBuilder<AzurePostgresFlexibleServerResource>, Action<IResourceBuilder<PostgresServerResource>>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<AzurePostgresFlexibleServerResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L217-L259)

Configures an Azure PostgreSQL Flexible Server resource to run locally in a container.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<AzurePostgresFlexibleServerResource> RunAsContainer(
        this IResourceBuilder<AzurePostgresFlexibleServerResource> builder,
        Action<IResourceBuilder<PostgresServerResource>>? configureContainer = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<AzurePostgresFlexibleServerResource>`)
  The Azure PostgreSQL server resource builder.
- `configureContainer` (`Action<IResourceBuilder<PostgresServerResource>>`) `optional`
  Callback that exposes underlying container to allow for customization.

## Returns

`IResourceBuilder<AzurePostgresFlexibleServerResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1` builder.

## Remarks

The following example creates an Azure PostgreSQL Flexible Server resource that runs locally in a PostgreSQL container and referencing that resource in a .NET project.

```csharp
var builder = DistributedApplication.CreateBuilder(args);

var data = builder.AddAzurePostgresFlexibleServer("data")
    .RunAsContainer();

builder.AddProject<Projects.ProductService>()
    .WithReference(data);

builder.Build().Run();
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithPasswordAuthentication(IResourceBuilder<AzurePostgresFlexibleServerResource>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)

- Name: `WithPasswordAuthentication(IResourceBuilder<AzurePostgresFlexibleServerResource>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<AzurePostgresFlexibleServerResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L300-L319)

Configures the resource to use password authentication for Azure PostgreSQL Flexible Server.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<AzurePostgresFlexibleServerResource> WithPasswordAuthentication(
        this IResourceBuilder<AzurePostgresFlexibleServerResource> builder,
        IResourceBuilder<ParameterResource>? userName = null,
        IResourceBuilder<ParameterResource>? password = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<AzurePostgresFlexibleServerResource>`)
  The Azure PostgreSQL server resource builder.
- `userName` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used to provide the user name for the PostgreSQL resource. If `null` a default value will be used.
- `password` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used to provide the administrator password for the PostgreSQL resource. If `null` a random password will be generated.

## Returns

`IResourceBuilder<AzurePostgresFlexibleServerResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1` builder.

## Remarks

The following example creates an Azure PostgreSQL Flexible Server resource that uses password authentication.

```csharp
var builder = DistributedApplication.CreateBuilder(args);

var data = builder.AddAzurePostgresFlexibleServer("data")
    .WithPasswordAuthentication();

builder.AddProject<Projects.ProductService>()
    .WithReference(data);

builder.Build().Run();
```

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## WithPasswordAuthentication(IResourceBuilder<AzurePostgresFlexibleServerResource>, IResourceBuilder<IAzureKeyVaultResource>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)

- Name: `WithPasswordAuthentication(IResourceBuilder<AzurePostgresFlexibleServerResource>, IResourceBuilder<IAzureKeyVaultResource>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<AzurePostgresFlexibleServerResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L352-L383)

Configures the resource to use password authentication for Azure PostgreSQL Flexible Server. This overload is used when the PostgreSQL resource is created in a container and the password is stored in an Azure Key Vault secret.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<AzurePostgresFlexibleServerResource> WithPasswordAuthentication(
        this IResourceBuilder<AzurePostgresFlexibleServerResource> builder,
        IResourceBuilder<IAzureKeyVaultResource> keyVaultBuilder,
        IResourceBuilder<ParameterResource>? userName = null,
        IResourceBuilder<ParameterResource>? password = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<AzurePostgresFlexibleServerResource>`)
  The Azure PostgreSQL server resource builder.
- `keyVaultBuilder` (`IResourceBuilder<IAzureKeyVaultResource>`)
  The Azure Key Vault resource builder.
- `userName` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used to provide the user name for the PostgreSQL resource. If `null` a default value will be used.
- `password` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used to provide the administrator password for the PostgreSQL resource. If `null` a random password will be generated.

## Returns

`IResourceBuilder<AzurePostgresFlexibleServerResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1` builder.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## WithPostgresMcp(IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>, Action<IResourceBuilder<PostgresMcpContainerResource>>, string?)

> **Experimental:** ASPIREPOSTGRES001 - [Learn more](/diagnostics/aspirepostgres001/)

- Name: `WithPostgresMcp(IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>, Action<IResourceBuilder<PostgresMcpContainerResource>>, string?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresExtensions.cs#L409-L421)

Adds a Postgres MCP server container and configures it to connect to the database represented by `builder`.

```csharp
public static class AzurePostgresExtensions
{
    public static IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource> WithPostgresMcp(
        this IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource> builder,
        Action<IResourceBuilder<PostgresMcpContainerResource>>? configureContainer = null,
        string? containerName = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>`)
  The Azure Postgres database resource builder.
- `configureContainer` (`Action<IResourceBuilder<PostgresMcpContainerResource>>`) `optional`
  Configuration callback for the Postgres MCP container resource.
- `containerName` (`string?`) `optional`
  The name of the container (optional).

## Returns

`IResourceBuilder<AzurePostgresFlexibleServerDatabaseResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1`.

## Remarks

The Postgres MCP server is configured to use SSE transport and will expose an HTTP endpoint.

This extension method only applies when the Azure PostgreSQL resource is running as a container (i.e., [AzurePostgresFlexibleServerDatabaseResource.IsContainer](/reference/api/csharp/aspire.hosting.azure.postgresql/azurepostgresflexibleserverdatabaseresource/properties.md#iscontainer) is `true`). If the resource is not running as a container, this method has no effect.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.
