Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
230 changes: 229 additions & 1 deletion src/content/docs/azure/services/dbfor-postgresql.mdx
Original file line number Diff line number Diff line change
@@ -1,11 +1,239 @@
---
title: "DB for PostgreSQL"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
title: "DB for PostgreSQL"
title: "Database for PostgreSQL Flexible Server"

description: API coverage for Microsoft.DBforPostgreSQL in LocalStack for Azure.
description: Get started with Azure DB for PostgreSQL on LocalStack
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
description: Get started with Azure DB for PostgreSQL on LocalStack
description: Get started with Azure Database for PostgreSQL flexible server on LocalStack

template: doc
---

import AzureFeatureCoverage from "../../../../components/feature-coverage/AzureFeatureCoverage";

## Introduction

Azure DB for PostgreSQL is a managed relational database service built on the PostgreSQL engine.
It helps provision and operate PostgreSQL servers with Azure control plane APIs for server, database, and network management.
This service is commonly used for application backends that require PostgreSQL compatibility with managed infrastructure workflows. For more information, see [Azure Database for PostgreSQL documentation](https://learn.microsoft.com/en-us/azure/postgresql/).
Comment on lines +11 to +13
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Azure DB for PostgreSQL is a managed relational database service built on the PostgreSQL engine.
It helps provision and operate PostgreSQL servers with Azure control plane APIs for server, database, and network management.
This service is commonly used for application backends that require PostgreSQL compatibility with managed infrastructure workflows. For more information, see [Azure Database for PostgreSQL documentation](https://learn.microsoft.com/en-us/azure/postgresql/).
Azure Database for PostgreSQL flexible server is a fully managed relational database service that provides granular control over database configuration and tuning. It supports PostgreSQL community versions and offers built-in high availability, intelligent performance monitoring, and flexible scaling across Burstable, General Purpose, and Memory Optimized compute tiers. Common use cases include web applications, microservices backends, and analytics workloads that benefit from PostgreSQL's extensibility and standards compliance. For more information, see [What is Azure Database for PostgreSQL - Flexible Server?](https://learn.microsoft.com/azure/postgresql/flexible-server/overview).


LocalStack for Azure provides a local environment for building and testing applications that make use of Azure DB for PostgreSQL.
The supported APIs are available on our [API Coverage section](#api-coverage), which provides information on the extent of DB for PostgreSQL integration with LocalStack.

## Getting started

This guide is designed for users new to Azure DB for PostgreSQL and assumes basic knowledge of the Azure CLI and our `azlocal` wrapper script.

Launch LocalStack using your preferred method. For more information, see [Introduction to LocalStack for Azure](/azure/getting-started/). Once the container is running, enable Azure CLI interception by running:

```bash
azlocal start-interception
```

This command points the `az` CLI away from the public Azure management REST API and toward the LocalStack for Azure emulator API.
To revert this configuration, run:

```bash
azlocal stop-interception
```

This reconfigures the `az` CLI to send commands to the official Azure management REST API.

### Create a resource group

Create a resource group for your PostgreSQL resources:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Create a resource group for your PostgreSQL resources:
Create a resource group to hold all resources created in this guide:


```bash
az group create \
--name rg-postgres-demo \
--location westeurope
```

```bash title="Output"
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo",
"location": "westeurope",
"name": "rg-postgres-demo",
"properties": {
"provisioningState": "Succeeded"
},
...
}
```

### Create and inspect a PostgreSQL flexible server

Create a flexible server:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Create a flexible server:
Create a Burstable-tier PostgreSQL 16 flexible server with 32 GB of storage:


```bash
az resource create \
--resource-group rg-postgres-demo \
--namespace Microsoft.DBforPostgreSQL \
--resource-type flexibleServers \
--name pgdoc96 \
--location westeurope \
--api-version 2024-08-01 \
--properties '{"administratorLogin":"pgadmin","administratorLoginPassword":"P@ssword1234!","version":"16","storage":{"storageSizeGB":32},"sku":{"name":"Standard_B1ms","tier":"Burstable"}}'
Comment on lines +64 to +71
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
az resource create \
--resource-group rg-postgres-demo \
--namespace Microsoft.DBforPostgreSQL \
--resource-type flexibleServers \
--name pgdoc96 \
--location westeurope \
--api-version 2024-08-01 \
--properties '{"administratorLogin":"pgadmin","administratorLoginPassword":"P@ssword1234!","version":"16","storage":{"storageSizeGB":32},"sku":{"name":"Standard_B1ms","tier":"Burstable"}}'
az postgres flexible-server create \
--name postgres-demo \
--resource-group rg-postgres-demo \
--location westeurope \
--admin-user pgadmin \
--admin-password 'P@ssw0rd2024!' \
--sku-name Standard_B1ms \
--tier Burstable \
--version 16 \
--storage-size 32 \
--yes

```

```bash title="Output"
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/pgdoc96",
"name": "pgdoc96",
"location": "westeurope",
"properties": {
"administratorLogin": "pgadmin",
"state": "Ready",
"version": "16",
...
},
"sku": {
"name": "Standard_D2s_v3",
"tier": "GeneralPurpose"
},
...
}
Comment on lines +75 to +90
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/pgdoc96",
"name": "pgdoc96",
"location": "westeurope",
"properties": {
"administratorLogin": "pgadmin",
"state": "Ready",
"version": "16",
...
},
"sku": {
"name": "Standard_D2s_v3",
"tier": "GeneralPurpose"
},
...
}
{
"connectionString": "postgresql://pgadmin:P%40ssw0rd2024%21@postgres-demo.postgres.database.azure.com/postgres?sslmode=require",
"host": "postgres-demo.postgres.database.azure.com",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo",
"location": "westeurope",
"password": "P@ssw0rd2024!",
"resourceGroup": "rg-postgres-demo",
"skuname": "Standard_B1ms",
"username": "pgadmin",
"version": "16"
}

```

Get and list flexible servers:
Comment on lines +92 to +93
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Get and list flexible servers:
The command waits for the server to reach the `Ready` state before returning.
### Show and list flexible servers
Retrieve the details of the flexible server:


```bash
az postgres flexible-server show \
--name pgdoc96 \
--resource-group rg-postgres-demo

az postgres flexible-server list \
--resource-group rg-postgres-demo
```

```bash title="Output"
{
"name": "pgdoc96",
"location": "westeurope",
"state": "Ready",
"version": "16",
"fullyQualifiedDomainName": "172.17.0.4",
...
}
[
{
"name": "pgdoc96",
"state": "Ready",
"version": "16",
...
}
]
```
Comment on lines +95 to +121
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
```bash
az postgres flexible-server show \
--name pgdoc96 \
--resource-group rg-postgres-demo
az postgres flexible-server list \
--resource-group rg-postgres-demo
```
```bash title="Output"
{
"name": "pgdoc96",
"location": "westeurope",
"state": "Ready",
"version": "16",
"fullyQualifiedDomainName": "172.17.0.4",
...
}
[
{
"name": "pgdoc96",
"state": "Ready",
"version": "16",
...
}
]
```
```bash
az postgres flexible-server show \
--name postgres-demo \
--resource-group rg-postgres-demo
```
```bash title="Output"
{
"administratorLogin": "pgadmin",
"authConfig": {
"activeDirectoryAuth": "Disabled",
"passwordAuth": "Enabled",
"tenantId": null
},
"backup": {
"backupRetentionDays": 7,
"geoRedundantBackup": "Disabled"
},
"fullyQualifiedDomainName": "postgres-demo.postgres.database.azure.com",
"highAvailability": {
"mode": "Disabled",
"state": "NotEnabled"
},
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo",
"location": "westeurope",
"name": "postgres-demo",
"network": {
"publicNetworkAccess": "Enabled"
},
"resourceGroup": "rg-postgres-demo",
"sku": {
"name": "Standard_B1ms",
"tier": "Burstable"
},
"state": "Ready",
"storage": {
"autoGrow": "Disabled",
"storageSizeGb": 32,
"tier": "P4",
"type": "Premium_LRS"
},
"type": "Microsoft.DBforPostgreSQL/flexibleServers",
"version": "16",
...
}
```
Then list all flexible servers in the resource group:
```bash
az postgres flexible-server list \
--resource-group rg-postgres-demo
```
```bash title="Output"
[
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo",
"location": "westeurope",
"name": "postgres-demo",
"sku": {
"name": "Standard_B1ms",
"tier": "Burstable"
},
"state": "Ready",
"version": "16",
...
}
]
```


### Create and inspect a database

Create a database in the server:
Comment on lines +123 to +125
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### Create and inspect a database
Create a database in the server:
### Update a flexible server
Update the server SKU and storage size:
```bash
az postgres flexible-server update \
--name postgres-demo \
--resource-group rg-postgres-demo \
--sku-name Standard_B2s \
--tier Burstable \
--storage-size 64
```
```bash title="Output"
{
"administratorLogin": "pgadmin",
"authConfig": {
"activeDirectoryAuth": "Disabled",
"passwordAuth": "Enabled",
"tenantId": null
},
"backup": {
"backupRetentionDays": 7,
"geoRedundantBackup": "Disabled"
},
"fullyQualifiedDomainName": "postgres-demo.postgres.database.azure.com",
"highAvailability": {
"mode": "Disabled",
"state": "NotEnabled"
},
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo",
"location": "westeurope",
"name": "postgres-demo",
"network": {
"publicNetworkAccess": "Enabled"
},
"resourceGroup": "rg-postgres-demo",
"sku": {
"name": "Standard_B2s",
"tier": "Burstable"
},
"state": "Ready",
"storage": {
"autoGrow": "Disabled",
"storageSizeGb": 64,
"tier": "P6",
"type": "Premium_LRS"
},
"type": "Microsoft.DBforPostgreSQL/flexibleServers",
"version": "16",
...
}
```
### Create a database
Create a database on the flexible server:


```bash
az postgres flexible-server db create \
--resource-group rg-postgres-demo \
--server-name pgdoc96 \
--database-name appdb
Comment on lines +128 to +131
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
az postgres flexible-server db create \
--resource-group rg-postgres-demo \
--server-name pgdoc96 \
--database-name appdb
az postgres flexible-server db create \
--server-name postgres-demo \
--resource-group rg-postgres-demo \
--database-name sampledb \
--charset UTF8 \
--collation en_US.utf8

```

```bash title="Output"
{
"charset": "utf8",
"collation": "en_US.utf8",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/pgdoc96/databases/appdb",
"name": "appdb",
...
}
Comment on lines +135 to +141
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{
"charset": "utf8",
"collation": "en_US.utf8",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/pgdoc96/databases/appdb",
"name": "appdb",
...
}
{
"charset": "UTF8",
"collation": "en_US.utf8",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo/databases/sampledb",
"name": "sampledb",
"resourceGroup": "rg-postgres-demo",
"type": "Microsoft.DBforPostgreSQL/flexibleServers/databases"
}

```

Get and list databases:

```bash
az postgres flexible-server db show \
--resource-group rg-postgres-demo \
--server-name pgdoc96 \
--database-name appdb
Comment on lines +147 to +150
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
az postgres flexible-server db show \
--resource-group rg-postgres-demo \
--server-name pgdoc96 \
--database-name appdb
az postgres flexible-server db show \
--resource-group rg-postgres-demo \
--server-name postgres-demo \
--database-name sampledb


az postgres flexible-server db list \
--resource-group rg-postgres-demo \
--server-name pgdoc96
Comment on lines +152 to +154
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
az postgres flexible-server db list \
--resource-group rg-postgres-demo \
--server-name pgdoc96
az postgres flexible-server db list \
--resource-group rg-postgres-demo \
--server-name postgres-demo

```

```bash title="Output"
{
"name": "appdb",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"name": "appdb",
"name": "sampledb",

"charset": "utf8",
"collation": "en_US.utf8",
...
}
[
{
"name": "postgres",
...
},
{
"name": "azure_sys",
...
},
{
"name": "azure_maintenance",
...
},
{
"name": "appdb",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"name": "appdb",
"name": "sampledb",

...
}
]
```

### Create and inspect a firewall rule

Create a firewall rule:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Create a firewall rule:
Create a firewall rule to allow connections from a specific IP address:


```bash
az postgres flexible-server firewall-rule create \
--resource-group rg-postgres-demo \
--name pgdoc96 \
--rule-name allow-local \
--start-ip-address 0.0.0.0 \
--end-ip-address 0.0.0.0
Comment on lines +189 to +194
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
az postgres flexible-server firewall-rule create \
--resource-group rg-postgres-demo \
--name pgdoc96 \
--rule-name allow-local \
--start-ip-address 0.0.0.0 \
--end-ip-address 0.0.0.0
az postgres flexible-server firewall-rule create \
--resource-group rg-postgres-demo \
--name postgres-demo \
--rule-name allow-myip \
--start-ip-address 203.0.113.10 \
--end-ip-address 203.0.113.10

```

```bash title="Output"
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/pgdoc96/firewallRules/allow-local",
"name": "allow-local",
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0",
...
}
Comment on lines +198 to +204
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/pgdoc96/firewallRules/allow-local",
"name": "allow-local",
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0",
...
}
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo/firewallRules/allow-myip",
"name": "allow-myip",
"resourceGroup": "rg-postgres-demo",
"startIpAddress": "203.0.113.10",
"endIpAddress": "203.0.113.10",
"type": "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules"
}

```

Get and list firewall rules:

```bash
az postgres flexible-server firewall-rule show \
--resource-group rg-postgres-demo \
--name pgdoc96 \
--rule-name allow-local
Comment on lines +210 to +213
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
az postgres flexible-server firewall-rule show \
--resource-group rg-postgres-demo \
--name pgdoc96 \
--rule-name allow-local
az postgres flexible-server firewall-rule show \
--resource-group rg-postgres-demo \
--name postgres-demo \
--rule-name allow-myip


az postgres flexible-server firewall-rule list \
--resource-group rg-postgres-demo \
--name pgdoc96
```

```bash title="Output"
{
"name": "allow-local",
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0",
...
}
[
{
"name": "allow-local",
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0",
...
}
]
Comment on lines +221 to +234
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{
"name": "allow-local",
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0",
...
}
[
{
"name": "allow-local",
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0",
...
}
]
{
"name": "allow-myip",
"startIpAddress": "203.0.113.10",
"endIpAddress": "203.0.113.10",
...
}
[
{
"name": "allow-myip",
"startIpAddress": "203.0.113.10",
"endIpAddress": "203.0.113.10",
...
}
]

```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### View and update server configuration
View the current value of the `max_connections` configuration parameter:
```bash
az postgres flexible-server parameter show \
--resource-group rg-postgres-demo \
--server-name postgres-demo \
--name max_connections
```
```bash title="Output"
{
"allowedValues": "25-5000",
"dataType": "Integer",
"defaultValue": "100",
"description": "Sets the maximum number of concurrent connections.",
"documentationLink": "https://www.postgresql.org/docs/16/runtime-config-connection.html#GUC-MAX-CONNECTIONS",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo/configurations/max_connections",
"isConfigPendingRestart": false,
"isDynamicConfig": false,
"isReadOnly": false,
"name": "max_connections",
"resourceGroup": "rg-postgres-demo",
"source": "system-default",
"type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
"unit": "",
"value": "100"
}
```
Update `max_connections` to 200:
```bash
az postgres flexible-server parameter set \
--resource-group rg-postgres-demo \
--server-name postgres-demo \
--name max_connections \
--value 200 \
--source user-override
```
```bash title="Output"
{
"allowedValues": "25-5000",
"dataType": "Integer",
"defaultValue": "100",
"description": "Sets the maximum number of concurrent connections.",
"documentationLink": "https://www.postgresql.org/docs/16/runtime-config-connection.html#GUC-MAX-CONNECTIONS",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-postgres-demo/providers/Microsoft.DBforPostgreSQL/flexibleServers/postgres-demo/configurations/max_connections",
"isConfigPendingRestart": true,
"isDynamicConfig": false,
"isReadOnly": false,
"name": "max_connections",
"resourceGroup": "rg-postgres-demo",
"source": "user-override",
"type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
"unit": "",
"value": "200"
}
```
Non-dynamic parameters such as `max_connections` set `isConfigPendingRestart` to `true` after an update. A server restart applies the change.
### Stop, start, and restart a server
Stop the flexible server:
```bash
az postgres flexible-server stop \
--resource-group rg-postgres-demo \
--name postgres-demo
```
```bash title="Output"
Server will be automatically started after 7 days if you do not perform a manual start operation
```
Verify the server state is `Stopped`:
```bash
az postgres flexible-server show \
--name postgres-demo \
--resource-group rg-postgres-demo \
--query state \
--output tsv
```
```bash title="Output"
Stopped
```
Start the server again:
```bash
az postgres flexible-server start \
--resource-group rg-postgres-demo \
--name postgres-demo
```
```bash title="Output"
```
Restart the server to apply pending configuration changes:
```bash
az postgres flexible-server restart \
--resource-group rg-postgres-demo \
--name postgres-demo
```
```bash title="Output"
```
### Delete and verify
Delete the flexible server:
```bash
az postgres flexible-server delete \
--resource-group rg-postgres-demo \
--name postgres-demo \
--yes
```
```bash title="Output"
```
Then list all flexible servers to confirm the resource group is now empty:
```bash
az postgres flexible-server list \
--resource-group rg-postgres-demo
```
```bash title="Output"
[]
```
## Features
The PostgreSQL Flexible Server emulator supports the following features:
- **Server lifecycle management**: Create, get, update, list, and delete flexible servers with full ARM resource model support.
- **Stop, start, and restart**: Transition servers between Ready and Stopped states with proper state machine enforcement.
- **Database management**: Create, get, list, and delete user databases. Each database is backed by a real PostgreSQL instance.
- **Firewall rules**: Create, get, update, list, and delete IP-based firewall rules with address range validation.
- **Server configuration**: Get, list, and update over 14 PostgreSQL configuration parameters with data-type validation and restart-pending tracking.
- **SKU tiers**: Burstable, General Purpose, and Memory Optimized tiers with multiple SKU sizes per tier.
- **PostgreSQL versions**: Versions 13, 14, 15, 16, and 17 with in-place major version upgrade support.
- **Storage management**: Configurable storage from 32 GB to 16 TB with automatic tier mapping and storage auto-grow support.
- **Name availability check**: Validate server name uniqueness across subscriptions before creation.
- **Location capabilities**: Query available SKUs, storage sizes, and supported PostgreSQL versions per region.
- **Long-running operations**: Server create, delete, start, stop, and restart return `202 Accepted` with async operation tracking headers.
- **Bicep and Terraform support**: Deploy flexible servers, databases, and firewall rules using infrastructure-as-code templates.
## Limitations
- **Backup and restore**: Backup retention days and geo-redundant backup settings are stored but no actual backups are performed. Point-in-time restore is not supported.
- **Read replicas**: Replica properties are returned in the server response but replica creation and management are not implemented.
- **Microsoft Entra authentication**: The `authConfig.activeDirectoryAuth` property is stored but Active Directory authentication is not enforced.
- **Virtual network integration**: Delegated subnet and private DNS zone properties are accepted but VNet injection is not performed.
- **Private endpoint connections**: The property is returned in the response but private endpoint connectivity is not implemented.
- **High availability failover**: High availability mode and standby availability zone are stored but no failover mechanism is active.
- **Firewall rule enforcement**: Firewall rules are stored and queryable but are not enforced on actual database connections.
- **Storage auto-grow enforcement**: The auto-grow setting is stored but automatic storage expansion does not occur.
## Samples
Explore end-to-end examples in the [LocalStack for Azure Samples](https://github.com/localstack/localstack-azure-samples) repository.

## API Coverage

<AzureFeatureCoverage service="Microsoft.DBforPostgreSQL" client:load />