Skip to main content Home Creators phoroth agentic azure-resource-manager-postgresql-dotnet
azure-resource-manager-postgresql-dotnet Azure PostgreSQL Flexible Server SDK for .NET. Database management for PostgreSQL Flexible Server deployments.
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/phoroth/AGENTIC --skill azure-resource-manager-postgresql-dotnetThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... More from this repository Related occupations SOC
Based on SOC occupation classification
name azure-resource-manager-postgresql-dotnet description Azure PostgreSQL Flexible Server SDK for .NET. Database management for PostgreSQL Flexible Server deployments. risk unknown source community date_added 2026-02-27
Azure.ResourceManager.PostgreSql (.NET)
Azure Resource Manager SDK for managing PostgreSQL Flexible Server deployments.
Installation
dotnet add package Azure.ResourceManager.PostgreSql
dotnet add package Azure.Identity
Current Version : v1.2.0 (GA)
API Version : 2023-12-01-preview
Note : This skill focuses on PostgreSQL Flexible Server. Single Server is deprecated and scheduled for retirement.
Enprojectnment Variables
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
AZURE_RESOURCE_GROUP=<your-resource-group>
AZURE_POSTGRESQL_SERVER_NAME=<your-postgresql-server>
Authentication
using Azure.Identity;
using Azure.ResourceManager;
Azure.ResourceManager.PostgreSql;
Azure.ResourceManager.PostgreSql.FlexibleServers;
ArmClient client = ArmClient( DefaultAzureCredential());
using
using
new
new
Resource Hierarchy Subscription
└── ResourceGroup
└── PostgreSqlFlexibleServer # PostgreSQL Flexible Server instance
├── PostgreSqlFlexibleServerDatabase # Database within the server
├── PostgreSqlFlexibleServerFirewallRule # IP firewall rules
├── PostgreSqlFlexibleServerConfiguration # Server parameters
├── PostgreSqlFlexibleServerBackup # Backup information
├── PostgreSqlFlexibleServerActiveDirectoryAdministrator # Entra ID admin
└── PostgreSqlFlexibleServerVirtualEndpoint # Read replica endpoints
Core Workflows
1. Create PostgreSQL Flexible Server using Azure.ResourceManager.PostgreSql.FlexibleServers;
using Azure.ResourceManager.PostgreSql.FlexibleServers.Models;
ResourceGroupResource resourceGroup = await client
.GetDefaultSubscriptionAsync()
.Result
.GetResourceGroupAsync("my-resource-group" );
PostgreSqlFlexibleServerCollection servers = resourceGroup.GetPostgreSqlFlexibleServers();
PostgreSqlFlexibleServerData data = new PostgreSqlFlexibleServerData(AzureLocation.EastUS)
{
Sku = new PostgreSqlFlexibleServerSku("Standard_D2ds_v4" , PostgreSqlFlexibleServerSkuTier.GeneralPurpose),
AdministratorLogin = "pgadmin" ,
AdministratorLoginPassword = "YourSecurePassword123!" ,
Version = PostgreSqlFlexibleServerVersion.Ver16,
Storage = new PostgreSqlFlexibleServerStorage
{
StorageSizeInGB = 128 ,
AutoGrow = StorageAutoGrow.Enabled,
Tier = PostgreSqlStorageTierName.P30
},
Backup = new PostgreSqlFlexibleServerBackupProperties
{
BackupRetentionDays = 7 ,
GeoRedundantBackup = PostgreSqlFlexibleServerGeoRedundantBackupEnum.Disabled
},
HighAvailability = new PostgreSqlFlexibleServerHighAvailability
{
Mode = PostgreSqlFlexibleServerHighAvailabilityMode.ZoneRedundant,
StandbyAvailabilityZone = "2"
},
AvailabilityZone = "1" ,
AuthConfig = new PostgreSqlFlexibleServerAuthConfig
{
ActiveDirectoryAuth = PostgreSqlFlexibleServerActiveDirectoryAuthEnum.Enabled,
PasswordAuth = PostgreSqlFlexibleServerPasswordAuthEnum.Enabled
}
};
ArmOperation<PostgreSqlFlexibleServerResource> operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-postgresql-server" , data);
PostgreSqlFlexibleServerResource server = operation.Value;
Console.WriteLine($"Server created: {server.Data.FullyQualifiedDomainName} " );
2. Create Database PostgreSqlFlexibleServerResource server = await resourceGroup
.GetPostgreSqlFlexibleServerAsync("my-postgresql-server" );
PostgreSqlFlexibleServerDatabaseCollection databases = server.GetPostgreSqlFlexibleServerDatabases();
PostgreSqlFlexibleServerDatabaseData dbData = new PostgreSqlFlexibleServerDatabaseData
{
Charset = "UTF8" ,
Collation = "en_US.utf8"
};
ArmOperation<PostgreSqlFlexibleServerDatabaseResource> operation = await databases
.CreateOrUpdateAsync(WaitUntil.Completed, "myappdb" , dbData);
PostgreSqlFlexibleServerDatabaseResource database = operation.Value;
Console.WriteLine($"Database created: {database.Data.Name} " );
3. Configure Firewall Rules PostgreSqlFlexibleServerFirewallRuleCollection firewallRules = server.GetPostgreSqlFlexibleServerFirewallRules();
PostgreSqlFlexibleServerFirewallRuleData ruleData = new PostgreSqlFlexibleServerFirewallRuleData
{
StartIPAddress = System.Net.IPAddress.Parse("10.0.0.1" ),
EndIPAddress = System.Net.IPAddress.Parse("10.0.0.255" )
};
ArmOperation<PostgreSqlFlexibleServerFirewallRuleResource> operation = await firewallRules
.CreateOrUpdateAsync(WaitUntil.Completed, "allow-internal" , ruleData);
PostgreSqlFlexibleServerFirewallRuleData azureServicesRule = new PostgreSqlFlexibleServerFirewallRuleData
{
StartIPAddress = System.Net.IPAddress.Parse("0.0.0.0" ),
EndIPAddress = System.Net.IPAddress.Parse("0.0.0.0" )
};
await firewallRules.CreateOrUpdateAsync(WaitUntil.Completed, "AllowAllAzureServicesAndResourcesWithinAzureIps" , azureServicesRule);
4. Update Server Configuration PostgreSqlFlexibleServerConfigurationCollection configurations = server.GetPostgreSqlFlexibleServerConfigurations();
PostgreSqlFlexibleServerConfigurationResource config = await configurations
.GetAsync("max_connections" );
PostgreSqlFlexibleServerConfigurationData configData = new PostgreSqlFlexibleServerConfigurationData
{
Value = "500" ,
Source = "user-override"
};
ArmOperation<PostgreSqlFlexibleServerConfigurationResource> operation = await configurations
.CreateOrUpdateAsync(WaitUntil.Completed, "max_connections" , configData);
string [] commonParams = {
"max_connections" ,
"shared_buffers" ,
"work_mem" ,
"maintenance_work_mem" ,
"effective_cache_size" ,
"log_min_duration_statement"
};
5. Configure Entra ID Administrator PostgreSqlFlexibleServerActiveDirectoryAdministratorCollection admins =
server.GetPostgreSqlFlexibleServerActiveDirectoryAdministrators();
PostgreSqlFlexibleServerActiveDirectoryAdministratorData adminData =
new PostgreSqlFlexibleServerActiveDirectoryAdministratorData
{
PrincipalType = PostgreSqlFlexibleServerPrincipalType.User,
PrincipalName = "aad-admin@contoso.com" ,
TenantId = Guid.Parse("<tenant-id>" )
};
ArmOperation<PostgreSqlFlexibleServerActiveDirectoryAdministratorResource> operation = await admins
.CreateOrUpdateAsync(WaitUntil.Completed, "<entra-object-id>" , adminData);
6. List and Manage Servers
await foreach (PostgreSqlFlexibleServerResource server in resourceGroup.GetPostgreSqlFlexibleServers())
{
Console.WriteLine($"Server: {server.Data.Name} " );
Console.WriteLine($" FQDN: {server.Data.FullyQualifiedDomainName} " );
Console.WriteLine($" Version: {server.Data.Version} " );
Console.WriteLine($" State: {server.Data.State} " );
Console.WriteLine($" SKU: {server.Data.Sku.Name} ({server.Data.Sku.Tier} )" );
Console.WriteLine($" HA: {server.Data.HighAvailability?.Mode} " );
}
await foreach (PostgreSqlFlexibleServerDatabaseResource db in server.GetPostgreSqlFlexibleServerDatabases())
{
Console.WriteLine($"Database: {db.Data.Name} " );
}
7. Backup and Point-in-Time Restore
await foreach (PostgreSqlFlexibleServerBackupResource backup in server.GetPostgreSqlFlexibleServerBackups())
{
Console.WriteLine($"Backup: {backup.Data.Name} " );
Console.WriteLine($" Type: {backup.Data.BackupType} " );
Console.WriteLine($" Completed: {backup.Data.CompletedOn} " );
}
PostgreSqlFlexibleServerData restoreData = new PostgreSqlFlexibleServerData(AzureLocation.EastUS)
{
CreateMode = PostgreSqlFlexibleServerCreateMode.PointInTimeRestore,
SourceServerResourceId = server.Id,
PointInTimeUtc = DateTimeOffset.UtcNow.AddHours(-2 )
};
ArmOperation<PostgreSqlFlexibleServerResource> operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-postgresql-restored" , restoreData);
8. Create Read Replica PostgreSqlFlexibleServerData replicaData = new PostgreSqlFlexibleServerData(AzureLocation.WestUS)
{
CreateMode = PostgreSqlFlexibleServerCreateMode.Replica,
SourceServerResourceId = server.Id,
Sku = new PostgreSqlFlexibleServerSku("Standard_D2ds_v4" , PostgreSqlFlexibleServerSkuTier.GeneralPurpose)
};
ArmOperation<PostgreSqlFlexibleServerResource> operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-postgresql-replica" , replicaData);
9. Stop and Start Server PostgreSqlFlexibleServerResource server = await resourceGroup
.GetPostgreSqlFlexibleServerAsync("my-postgresql-server" );
await server.StopAsync(WaitUntil.Completed);
await server.StartAsync(WaitUntil.Completed);
await server.RestartAsync(WaitUntil.Completed, new PostgreSqlFlexibleServerRestartParameter
{
RestartWithFailover = true ,
FailoverMode = PostgreSqlFlexibleServerFailoverMode.PlannedFailover
});
10. Update Server (Scale) PostgreSqlFlexibleServerResource server = await resourceGroup
.GetPostgreSqlFlexibleServerAsync("my-postgresql-server" );
PostgreSqlFlexibleServerPatch patch = new PostgreSqlFlexibleServerPatch
{
Sku = new PostgreSqlFlexibleServerSku("Standard_D4ds_v4" , PostgreSqlFlexibleServerSkuTier.GeneralPurpose),
Storage = new PostgreSqlFlexibleServerStorage
{
StorageSizeInGB = 256 ,
Tier = PostgreSqlStorageTierName.P40
}
};
ArmOperation<PostgreSqlFlexibleServerResource> operation = await server
.UpdateAsync(WaitUntil.Completed, patch);
11. Delete Server PostgreSqlFlexibleServerResource server = await resourceGroup
.GetPostgreSqlFlexibleServerAsync("my-postgresql-server" );
await server.DeleteAsync(WaitUntil.Completed);
Key Types Reference Type Purpose PostgreSqlFlexibleServerResourceFlexible Server instance PostgreSqlFlexibleServerDataServer configuration data PostgreSqlFlexibleServerCollectionCollection of servers PostgreSqlFlexibleServerDatabaseResourceDatabase within server PostgreSqlFlexibleServerFirewallRuleResourceIP firewall rule PostgreSqlFlexibleServerConfigurationResourceServer parameter PostgreSqlFlexibleServerBackupResourceBackup metadata PostgreSqlFlexibleServerActiveDirectoryAdministratorResourceEntra ID admin PostgreSqlFlexibleServerSkuSKU (compute tier + size) PostgreSqlFlexibleServerStorageStorage configuration PostgreSqlFlexibleServerHighAvailabilityHA configuration PostgreSqlFlexibleServerBackupPropertiesBackup settings PostgreSqlFlexibleServerAuthConfigAuthentication settings
SKU Tiers Tier Use Case SKU Examples BurstableDev/test, light workloads Standard_B1ms, Standard_B2s GeneralPurposeProduction workloads Standard_D2ds_v4, Standard_D4ds_v4 MemoryOptimizedHigh memory requirements Standard_E2ds_v4, Standard_E4ds_v4
PostgreSQL Versions Version Enum Value PostgreSQL 11 Ver11PostgreSQL 12 Ver12PostgreSQL 13 Ver13PostgreSQL 14 Ver14PostgreSQL 15 Ver15PostgreSQL 16 Ver16
High Availability Modes Mode Description DisabledNo HA (single server) SameZoneHA within same availability zone ZoneRedundantHA across availability zones
Best Practices
Use Flexible Server — Single Server is deprecated
Enable zone-redundant HA — For production workloads
Use DefaultAzureCredential — Prefer over connection strings
Configure Entra ID authentication — More secure than SQL auth alone
Enable both auth methods — Entra ID + password for flexibility
Set appropriate backup retention — 7-35 days based on compliance
Use private endpoints — For secure network access
Tune server parameters — Based on workload characteristics
Use read replicas — For read-heavy workloads
Stop dev/test servers — Save costs when not in use
Error Handling using Azure;
try
{
ArmOperation<PostgreSqlFlexibleServerResource> operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-postgresql" , data);
}
catch (RequestFailedException ex) when (ex.Status == 409 )
{
Console.WriteLine("Server already exists" );
}
catch (RequestFailedException ex) when (ex.Status == 400 )
{
Console.WriteLine($"Invalid configuration: {ex.Message} " );
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Azure error: {ex.Status} - {ex.Message} " );
}
Connection String After creating the server, connect using:
string connectionString = $"Host={server.Data.FullyQualifiedDomainName} ;" +
"Database=myappdb;" +
"Username=pgadmin;" +
"Password=YourSecurePassword123!;" +
"SSL Mode=Require;Trust Server Certificate=true;" ;
var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(
new TokenRequestContext(new [] { "https://ossrdbms-aad.database.windows.net/.default" }));
string connectionString = $"Host={server.Data.FullyQualifiedDomainName} ;" +
"Database=myappdb;" +
$"Username=aad-admin@contoso.com;" +
$"Password={token.Token} ;" +
"SSL Mode=Require;" ;
Related SDKs SDK Purpose Install Azure.ResourceManager.PostgreSqlPostgreSQL management (this SDK) dotnet add package Azure.ResourceManager.PostgreSqlAzure.ResourceManager.MySqlMySQL management dotnet add package Azure.ResourceManager.MySqlNpgsqlPostgreSQL data access dotnet add package NpgsqlNpgsql.EntityFrameworkCore.PostgreSQLEF Core provider dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
Reference Links
When to Use This skill is applicable to execute the workflow or actions described in the overview.
Limitations
Use this skill only when the task clearly matches the scope described above.
Do not treat the output as a substitute for enprojectnment-specific validation, testing, or expert review.
Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.