From 4d02fc1246f3304e564ac9a3810df8f5fc3f96ef Mon Sep 17 00:00:00 2001 From: HarshCasper Date: Wed, 15 Apr 2026 15:26:14 +0530 Subject: [PATCH 1/3] Azure Docs: DB for PostgreSQL --- .../docs/azure/services/dbfor-postgresql.mdx | 230 +++++++++++++++++- 1 file changed, 229 insertions(+), 1 deletion(-) diff --git a/src/content/docs/azure/services/dbfor-postgresql.mdx b/src/content/docs/azure/services/dbfor-postgresql.mdx index 5c2c7ff4..6784c4b7 100644 --- a/src/content/docs/azure/services/dbfor-postgresql.mdx +++ b/src/content/docs/azure/services/dbfor-postgresql.mdx @@ -1,11 +1,239 @@ --- title: "DB for PostgreSQL" -description: API coverage for Microsoft.DBforPostgreSQL in LocalStack for Azure. +description: Get started with Azure DB for PostgreSQL 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/). + +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: + +```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: + +```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"}}' +``` + +```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" + }, + ... +} +``` + +Get and list flexible servers: + +```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", + ... + } +] +``` + +### Create and inspect a database + +Create a database in the server: + +```bash +az postgres flexible-server db create \ + --resource-group rg-postgres-demo \ + --server-name pgdoc96 \ + --database-name appdb +``` + +```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", + ... +} +``` + +Get and list databases: + +```bash +az postgres flexible-server db show \ + --resource-group rg-postgres-demo \ + --server-name pgdoc96 \ + --database-name appdb + +az postgres flexible-server db list \ + --resource-group rg-postgres-demo \ + --server-name pgdoc96 +``` + +```bash title="Output" +{ + "name": "appdb", + "charset": "utf8", + "collation": "en_US.utf8", + ... +} +[ + { + "name": "postgres", + ... + }, + { + "name": "azure_sys", + ... + }, + { + "name": "azure_maintenance", + ... + }, + { + "name": "appdb", + ... + } +] +``` + +### Create and inspect a firewall rule + +Create a firewall rule: + +```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 +``` + +```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", + ... +} +``` + +Get and list firewall rules: + +```bash +az postgres flexible-server firewall-rule show \ + --resource-group rg-postgres-demo \ + --name pgdoc96 \ + --rule-name allow-local + +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", + ... + } +] +``` + ## API Coverage From fd6099ab11498d83c9992a7bc5605aeeb5d1461b Mon Sep 17 00:00:00 2001 From: Harsh Mishra Date: Mon, 11 May 2026 17:34:36 +0530 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: Paolo Salvatori --- .../docs/azure/services/dbfor-postgresql.mdx | 148 ++++++++---------- 1 file changed, 65 insertions(+), 83 deletions(-) diff --git a/src/content/docs/azure/services/dbfor-postgresql.mdx b/src/content/docs/azure/services/dbfor-postgresql.mdx index 6784c4b7..335ed714 100644 --- a/src/content/docs/azure/services/dbfor-postgresql.mdx +++ b/src/content/docs/azure/services/dbfor-postgresql.mdx @@ -1,6 +1,6 @@ --- -title: "DB for PostgreSQL" -description: Get started with Azure DB for PostgreSQL on LocalStack +title: "Database for PostgreSQL Flexible Server" +description: Get started with Azure Database for PostgreSQL flexible server on LocalStack template: doc --- @@ -8,9 +8,7 @@ import AzureFeatureCoverage from "../../../../components/feature-coverage/AzureF ## 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/). +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. @@ -36,7 +34,7 @@ This reconfigures the `az` CLI to send commands to the official Azure management ### Create a resource group -Create a resource group for your PostgreSQL resources: +Create a resource group to hold all resources created in this guide: ```bash az group create \ @@ -58,86 +56,65 @@ az group create \ ### Create and inspect a PostgreSQL flexible server -Create a flexible server: +Create a Burstable-tier PostgreSQL 16 flexible server with 32 GB of storage: ```bash -az resource create \ +az postgres flexible-server create \ + --name postgres-demo \ --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"}}' + --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", + "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", - "properties": { - "administratorLogin": "pgadmin", - "state": "Ready", - "version": "16", - ... - }, - "sku": { - "name": "Standard_D2s_v3", - "tier": "GeneralPurpose" - }, - ... + "password": "P@ssw0rd2024!", + "resourceGroup": "rg-postgres-demo", + "skuname": "Standard_B1ms", + "username": "pgadmin", + "version": "16" } ``` -Get and list flexible servers: +The command waits for the server to reach the `Ready` state before returning. -```bash -az postgres flexible-server show \ - --name pgdoc96 \ - --resource-group rg-postgres-demo +### Show and list flexible servers -az postgres flexible-server list \ - --resource-group rg-postgres-demo -``` +Retrieve the details of the flexible server: -```bash title="Output" -{ - "name": "pgdoc96", - "location": "westeurope", - "state": "Ready", - "version": "16", - "fullyQualifiedDomainName": "172.17.0.4", - ... -} -[ - { - "name": "pgdoc96", - "state": "Ready", - "version": "16", - ... - } -] -``` -### Create and inspect a database +### Update a flexible server + +Update the server SKU and storage size: -Create a database in the server: ```bash az postgres flexible-server db create \ + --server-name postgres-demo \ --resource-group rg-postgres-demo \ - --server-name pgdoc96 \ - --database-name appdb + --database-name sampledb \ + --charset UTF8 \ + --collation en_US.utf8 ``` ```bash title="Output" { - "charset": "utf8", + "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", - ... + "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" } ``` @@ -146,17 +123,17 @@ Get and list databases: ```bash az postgres flexible-server db show \ --resource-group rg-postgres-demo \ - --server-name pgdoc96 \ - --database-name appdb + --server-name postgres-demo \ + --database-name sampledb az postgres flexible-server db list \ --resource-group rg-postgres-demo \ - --server-name pgdoc96 + --server-name postgres-demo ``` ```bash title="Output" { - "name": "appdb", + "name": "sampledb", "charset": "utf8", "collation": "en_US.utf8", ... @@ -175,7 +152,7 @@ az postgres flexible-server db list \ ... }, { - "name": "appdb", + "name": "sampledb", ... } ] @@ -183,24 +160,25 @@ az postgres flexible-server db list \ ### Create and inspect a firewall rule -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 + --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", - ... + "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" } ``` @@ -209,8 +187,8 @@ Get and list firewall rules: ```bash az postgres flexible-server firewall-rule show \ --resource-group rg-postgres-demo \ - --name pgdoc96 \ - --rule-name allow-local + --name postgres-demo \ + --rule-name allow-myip az postgres flexible-server firewall-rule list \ --resource-group rg-postgres-demo \ @@ -219,21 +197,25 @@ az postgres flexible-server firewall-rule list \ ```bash title="Output" { - "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-local", - "startIpAddress": "0.0.0.0", - "endIpAddress": "0.0.0.0", + "name": "allow-myip", + "startIpAddress": "203.0.113.10", + "endIpAddress": "203.0.113.10", ... } ] ``` +### View and update server configuration + +View the current value of the `max_connections` configuration parameter: + ## API Coverage From f08f87ccb2385bb6da846e2a0f900b6015880e2a Mon Sep 17 00:00:00 2001 From: Harsh Mishra Date: Mon, 11 May 2026 20:32:59 +0530 Subject: [PATCH 3/3] final set --- .../docs/azure/services/dbfor-postgresql.mdx | 283 +++++++++++++++++- 1 file changed, 282 insertions(+), 1 deletion(-) diff --git a/src/content/docs/azure/services/dbfor-postgresql.mdx b/src/content/docs/azure/services/dbfor-postgresql.mdx index 335ed714..1a0dac62 100644 --- a/src/content/docs/azure/services/dbfor-postgresql.mdx +++ b/src/content/docs/azure/services/dbfor-postgresql.mdx @@ -92,11 +92,134 @@ The command waits for the server to reach the `Ready` state before returning. Retrieve the details of the flexible server: +```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", + ... + } +] +``` ### 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 \ @@ -192,7 +315,7 @@ az postgres flexible-server firewall-rule show \ az postgres flexible-server firewall-rule list \ --resource-group rg-postgres-demo \ - --name pgdoc96 + --name postgres-demo ``` ```bash title="Output" @@ -216,6 +339,164 @@ az postgres flexible-server firewall-rule list \ 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 +``` + +Restart the server to apply pending configuration changes: + +```bash +az postgres flexible-server restart \ + --resource-group rg-postgres-demo \ + --name postgres-demo +``` + +### Delete and verify + +Delete the flexible server: + +```bash +az postgres flexible-server delete \ + --resource-group rg-postgres-demo \ + --name postgres-demo \ + --yes +``` + +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