[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-3c0dda26-b141-4a06-a8ee-8a6230e3f7ef":3,"$fqxeHQOwN1flef093P7b0U1dnFDFlN3FizDaD3t5xfOo":42},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":33},"3c0dda26-b141-4a06-a8ee-8a6230e3f7ef","azure-resource-manager-postgresql-dotnet","Azure PostgreSQL灵活服务器SDK for .NET。PostgreSQL灵活服务器部署的数据库管理。","cat_coding_backend","mod_coding","sickn33,coding","---\nname: azure-resource-manager-postgresql-dotnet\ndescription: Azure PostgreSQL Flexible Server SDK for .NET. Database management for PostgreSQL Flexible Server deployments.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure.ResourceManager.PostgreSql (.NET)\n\nAzure Resource Manager SDK for managing PostgreSQL Flexible Server deployments.\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.PostgreSql\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.2.0 (GA)  \n**API Version**: 2023-12-01-preview\n\n> **Note**: This skill focuses on PostgreSQL Flexible Server. Single Server is deprecated and scheduled for retirement.\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>\nAZURE_RESOURCE_GROUP=\u003Cyour-resource-group>\nAZURE_POSTGRESQL_SERVER_NAME=\u003Cyour-postgresql-server>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.PostgreSql;\nusing Azure.ResourceManager.PostgreSql.FlexibleServers;\n\nArmClient client = new ArmClient(new DefaultAzureCredential());\n```\n\n## Resource Hierarchy\n\n```\nSubscription\n└── ResourceGroup\n    └── PostgreSqlFlexibleServer              # PostgreSQL Flexible Server instance\n        ├── PostgreSqlFlexibleServerDatabase  # Database within the server\n        ├── PostgreSqlFlexibleServerFirewallRule # IP firewall rules\n        ├── PostgreSqlFlexibleServerConfiguration # Server parameters\n        ├── PostgreSqlFlexibleServerBackup    # Backup information\n        ├── PostgreSqlFlexibleServerActiveDirectoryAdministrator # Entra ID admin\n        └── PostgreSqlFlexibleServerVirtualEndpoint # Read replica endpoints\n```\n\n## Core Workflows\n\n### 1. Create PostgreSQL Flexible Server\n\n```csharp\nusing Azure.ResourceManager.PostgreSql.FlexibleServers;\nusing Azure.ResourceManager.PostgreSql.FlexibleServers.Models;\n\nResourceGroupResource resourceGroup = await client\n    .GetDefaultSubscriptionAsync()\n    .Result\n    .GetResourceGroupAsync(\"my-resource-group\");\n\nPostgreSqlFlexibleServerCollection servers = resourceGroup.GetPostgreSqlFlexibleServers();\n\nPostgreSqlFlexibleServerData data = new PostgreSqlFlexibleServerData(AzureLocation.EastUS)\n{\n    Sku = new PostgreSqlFlexibleServerSku(\"Standard_D2ds_v4\", PostgreSqlFlexibleServerSkuTier.GeneralPurpose),\n    AdministratorLogin = \"pgadmin\",\n    AdministratorLoginPassword = \"YourSecurePassword123!\",\n    Version = PostgreSqlFlexibleServerVersion.Ver16,\n    Storage = new PostgreSqlFlexibleServerStorage\n    {\n        StorageSizeInGB = 128,\n        AutoGrow = StorageAutoGrow.Enabled,\n        Tier = PostgreSqlStorageTierName.P30\n    },\n    Backup = new PostgreSqlFlexibleServerBackupProperties\n    {\n        BackupRetentionDays = 7,\n        GeoRedundantBackup = PostgreSqlFlexibleServerGeoRedundantBackupEnum.Disabled\n    },\n    HighAvailability = new PostgreSqlFlexibleServerHighAvailability\n    {\n        Mode = PostgreSqlFlexibleServerHighAvailabilityMode.ZoneRedundant,\n        StandbyAvailabilityZone = \"2\"\n    },\n    AvailabilityZone = \"1\",\n    AuthConfig = new PostgreSqlFlexibleServerAuthConfig\n    {\n        ActiveDirectoryAuth = PostgreSqlFlexibleServerActiveDirectoryAuthEnum.Enabled,\n        PasswordAuth = PostgreSqlFlexibleServerPasswordAuthEnum.Enabled\n    }\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-postgresql-server\", data);\n\nPostgreSqlFlexibleServerResource server = operation.Value;\nConsole.WriteLine($\"Server created: {server.Data.FullyQualifiedDomainName}\");\n```\n\n### 2. Create Database\n\n```csharp\nPostgreSqlFlexibleServerResource server = await resourceGroup\n    .GetPostgreSqlFlexibleServerAsync(\"my-postgresql-server\");\n\nPostgreSqlFlexibleServerDatabaseCollection databases = server.GetPostgreSqlFlexibleServerDatabases();\n\nPostgreSqlFlexibleServerDatabaseData dbData = new PostgreSqlFlexibleServerDatabaseData\n{\n    Charset = \"UTF8\",\n    Collation = \"en_US.utf8\"\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerDatabaseResource> operation = await databases\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"myappdb\", dbData);\n\nPostgreSqlFlexibleServerDatabaseResource database = operation.Value;\nConsole.WriteLine($\"Database created: {database.Data.Name}\");\n```\n\n### 3. Configure Firewall Rules\n\n```csharp\nPostgreSqlFlexibleServerFirewallRuleCollection firewallRules = server.GetPostgreSqlFlexibleServerFirewallRules();\n\n\u002F\u002F Allow specific IP range\nPostgreSqlFlexibleServerFirewallRuleData ruleData = new PostgreSqlFlexibleServerFirewallRuleData\n{\n    StartIPAddress = System.Net.IPAddress.Parse(\"10.0.0.1\"),\n    EndIPAddress = System.Net.IPAddress.Parse(\"10.0.0.255\")\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerFirewallRuleResource> operation = await firewallRules\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"allow-internal\", ruleData);\n\n\u002F\u002F Allow Azure services\nPostgreSqlFlexibleServerFirewallRuleData azureServicesRule = new PostgreSqlFlexibleServerFirewallRuleData\n{\n    StartIPAddress = System.Net.IPAddress.Parse(\"0.0.0.0\"),\n    EndIPAddress = System.Net.IPAddress.Parse(\"0.0.0.0\")\n};\n\nawait firewallRules.CreateOrUpdateAsync(WaitUntil.Completed, \"AllowAllAzureServicesAndResourcesWithinAzureIps\", azureServicesRule);\n```\n\n### 4. Update Server Configuration\n\n```csharp\nPostgreSqlFlexibleServerConfigurationCollection configurations = server.GetPostgreSqlFlexibleServerConfigurations();\n\n\u002F\u002F Get current configuration\nPostgreSqlFlexibleServerConfigurationResource config = await configurations\n    .GetAsync(\"max_connections\");\n\n\u002F\u002F Update configuration\nPostgreSqlFlexibleServerConfigurationData configData = new PostgreSqlFlexibleServerConfigurationData\n{\n    Value = \"500\",\n    Source = \"user-override\"\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerConfigurationResource> operation = await configurations\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"max_connections\", configData);\n\n\u002F\u002F Common PostgreSQL configurations to tune\nstring[] commonParams = { \n    \"max_connections\", \n    \"shared_buffers\", \n    \"work_mem\", \n    \"maintenance_work_mem\",\n    \"effective_cache_size\",\n    \"log_min_duration_statement\"\n};\n```\n\n### 5. Configure Entra ID Administrator\n\n```csharp\nPostgreSqlFlexibleServerActiveDirectoryAdministratorCollection admins = \n    server.GetPostgreSqlFlexibleServerActiveDirectoryAdministrators();\n\nPostgreSqlFlexibleServerActiveDirectoryAdministratorData adminData = \n    new PostgreSqlFlexibleServerActiveDirectoryAdministratorData\n{\n    PrincipalType = PostgreSqlFlexibleServerPrincipalType.User,\n    PrincipalName = \"aad-admin@contoso.com\",\n    TenantId = Guid.Parse(\"\u003Ctenant-id>\")\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerActiveDirectoryAdministratorResource> operation = await admins\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"\u003Centra-object-id>\", adminData);\n```\n\n### 6. List and Manage Servers\n\n```csharp\n\u002F\u002F List servers in resource group\nawait foreach (PostgreSqlFlexibleServerResource server in resourceGroup.GetPostgreSqlFlexibleServers())\n{\n    Console.WriteLine($\"Server: {server.Data.Name}\");\n    Console.WriteLine($\"  FQDN: {server.Data.FullyQualifiedDomainName}\");\n    Console.WriteLine($\"  Version: {server.Data.Version}\");\n    Console.WriteLine($\"  State: {server.Data.State}\");\n    Console.WriteLine($\"  SKU: {server.Data.Sku.Name} ({server.Data.Sku.Tier})\");\n    Console.WriteLine($\"  HA: {server.Data.HighAvailability?.Mode}\");\n}\n\n\u002F\u002F List databases in server\nawait foreach (PostgreSqlFlexibleServerDatabaseResource db in server.GetPostgreSqlFlexibleServerDatabases())\n{\n    Console.WriteLine($\"Database: {db.Data.Name}\");\n}\n```\n\n### 7. Backup and Point-in-Time Restore\n\n```csharp\n\u002F\u002F List available backups\nawait foreach (PostgreSqlFlexibleServerBackupResource backup in server.GetPostgreSqlFlexibleServerBackups())\n{\n    Console.WriteLine($\"Backup: {backup.Data.Name}\");\n    Console.WriteLine($\"  Type: {backup.Data.BackupType}\");\n    Console.WriteLine($\"  Completed: {backup.Data.CompletedOn}\");\n}\n\n\u002F\u002F Point-in-time restore\nPostgreSqlFlexibleServerData restoreData = new PostgreSqlFlexibleServerData(AzureLocation.EastUS)\n{\n    CreateMode = PostgreSqlFlexibleServerCreateMode.PointInTimeRestore,\n    SourceServerResourceId = server.Id,\n    PointInTimeUtc = DateTimeOffset.UtcNow.AddHours(-2)\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-postgresql-restored\", restoreData);\n```\n\n### 8. Create Read Replica\n\n```csharp\nPostgreSqlFlexibleServerData replicaData = new PostgreSqlFlexibleServerData(AzureLocation.WestUS)\n{\n    CreateMode = PostgreSqlFlexibleServerCreateMode.Replica,\n    SourceServerResourceId = server.Id,\n    Sku = new PostgreSqlFlexibleServerSku(\"Standard_D2ds_v4\", PostgreSqlFlexibleServerSkuTier.GeneralPurpose)\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-postgresql-replica\", replicaData);\n```\n\n### 9. Stop and Start Server\n\n```csharp\nPostgreSqlFlexibleServerResource server = await resourceGroup\n    .GetPostgreSqlFlexibleServerAsync(\"my-postgresql-server\");\n\n\u002F\u002F Stop server (saves costs when not in use)\nawait server.StopAsync(WaitUntil.Completed);\n\n\u002F\u002F Start server\nawait server.StartAsync(WaitUntil.Completed);\n\n\u002F\u002F Restart server\nawait server.RestartAsync(WaitUntil.Completed, new PostgreSqlFlexibleServerRestartParameter\n{\n    RestartWithFailover = true,\n    FailoverMode = PostgreSqlFlexibleServerFailoverMode.PlannedFailover\n});\n```\n\n### 10. Update Server (Scale)\n\n```csharp\nPostgreSqlFlexibleServerResource server = await resourceGroup\n    .GetPostgreSqlFlexibleServerAsync(\"my-postgresql-server\");\n\nPostgreSqlFlexibleServerPatch patch = new PostgreSqlFlexibleServerPatch\n{\n    Sku = new PostgreSqlFlexibleServerSku(\"Standard_D4ds_v4\", PostgreSqlFlexibleServerSkuTier.GeneralPurpose),\n    Storage = new PostgreSqlFlexibleServerStorage\n    {\n        StorageSizeInGB = 256,\n        Tier = PostgreSqlStorageTierName.P40\n    }\n};\n\nArmOperation\u003CPostgreSqlFlexibleServerResource> operation = await server\n    .UpdateAsync(WaitUntil.Completed, patch);\n```\n\n### 11. Delete Server\n\n```csharp\nPostgreSqlFlexibleServerResource server = await resourceGroup\n    .GetPostgreSqlFlexibleServerAsync(\"my-postgresql-server\");\n\nawait server.DeleteAsync(WaitUntil.Completed);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `PostgreSqlFlexibleServerResource` | Flexible Server instance |\n| `PostgreSqlFlexibleServerData` | Server configuration data |\n| `PostgreSqlFlexibleServerCollection` | Collection of servers |\n| `PostgreSqlFlexibleServerDatabaseResource` | Database within server |\n| `PostgreSqlFlexibleServerFirewallRuleResource` | IP firewall rule |\n| `PostgreSqlFlexibleServerConfigurationResource` | Server parameter |\n| `PostgreSqlFlexibleServerBackupResource` | Backup metadata |\n| `PostgreSqlFlexibleServerActiveDirectoryAdministratorResource` | Entra ID admin |\n| `PostgreSqlFlexibleServerSku` | SKU (compute tier + size) |\n| `PostgreSqlFlexibleServerStorage` | Storage configuration |\n| `PostgreSqlFlexibleServerHighAvailability` | HA configuration |\n| `PostgreSqlFlexibleServerBackupProperties` | Backup settings |\n| `PostgreSqlFlexibleServerAuthConfig` | Authentication settings |\n\n## SKU Tiers\n\n| Tier | Use Case | SKU Examples |\n|------|----------|--------------|\n| `Burstable` | Dev\u002Ftest, light workloads | Standard_B1ms, Standard_B2s |\n| `GeneralPurpose` | Production workloads | Standard_D2ds_v4, Standard_D4ds_v4 |\n| `MemoryOptimized` | High memory requirements | Standard_E2ds_v4, Standard_E4ds_v4 |\n\n## PostgreSQL Versions\n\n| Version | Enum Value |\n|---------|------------|\n| PostgreSQL 11 | `Ver11` |\n| PostgreSQL 12 | `Ver12` |\n| PostgreSQL 13 | `Ver13` |\n| PostgreSQL 14 | `Ver14` |\n| PostgreSQL 15 | `Ver15` |\n| PostgreSQL 16 | `Ver16` |\n\n## High Availability Modes\n\n| Mode | Description |\n|------|-------------|\n| `Disabled` | No HA (single server) |\n| `SameZone` | HA within same availability zone |\n| `ZoneRedundant` | HA across availability zones |\n\n## Best Practices\n\n1. **Use Flexible Server** — Single Server is deprecated\n2. **Enable zone-redundant HA** — For production workloads\n3. **Use DefaultAzureCredential** — Prefer over connection strings\n4. **Configure Entra ID authentication** — More secure than SQL auth alone\n5. **Enable both auth methods** — Entra ID + password for flexibility\n6. **Set appropriate backup retention** — 7-35 days based on compliance\n7. **Use private endpoints** — For secure network access\n8. **Tune server parameters** — Based on workload characteristics\n9. **Use read replicas** — For read-heavy workloads\n10. **Stop dev\u002Ftest servers** — Save costs when not in use\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    ArmOperation\u003CPostgreSqlFlexibleServerResource> operation = await servers\n        .CreateOrUpdateAsync(WaitUntil.Completed, \"my-postgresql\", data);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Server already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Invalid configuration: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Azure error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Connection String\n\nAfter creating the server, connect using:\n\n```csharp\n\u002F\u002F Npgsql connection string\nstring connectionString = $\"Host={server.Data.FullyQualifiedDomainName};\" +\n    \"Database=myappdb;\" +\n    \"Username=pgadmin;\" +\n    \"Password=YourSecurePassword123!;\" +\n    \"SSL Mode=Require;Trust Server Certificate=true;\";\n\n\u002F\u002F With Entra ID token (recommended)\nvar credential = new DefaultAzureCredential();\nvar token = await credential.GetTokenAsync(\n    new TokenRequestContext(new[] { \"https:\u002F\u002Fossrdbms-aad.database.windows.net\u002F.default\" }));\n\nstring connectionString = $\"Host={server.Data.FullyQualifiedDomainName};\" +\n    \"Database=myappdb;\" +\n    $\"Username=aad-admin@contoso.com;\" +\n    $\"Password={token.Token};\" +\n    \"SSL Mode=Require;\";\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.PostgreSql` | PostgreSQL management (this SDK) | `dotnet add package Azure.ResourceManager.PostgreSql` |\n| `Azure.ResourceManager.MySql` | MySQL management | `dotnet add package Azure.ResourceManager.MySql` |\n| `Npgsql` | PostgreSQL data access | `dotnet add package Npgsql` |\n| `Npgsql.EntityFrameworkCore.PostgreSQL` | EF Core provider | `dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.ResourceManager.PostgreSql |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.resourcemanager.postgresql |\n| Product Documentation | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fpostgresql\u002Fflexible-server\u002F |\n| GitHub Source | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fpostgresql\u002FAzure.ResourceManager.PostgreSql |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,100,712,"2026-05-16 13:07:27",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":25,"skillCount":32,"createdAt":26},"后端开发","backend","mdi-server","API、数据库、服务端架构",296,[34],{"id":35,"skillId":4,"version":36,"fileName":37,"fileSize":38,"filePath":39,"fileHash":40,"manifest":41,"createdAt":19},"ed03a44c-71c7-4740-99a7-a0ee8231d52c","1.0.0","azure-resource-manager-postgresql-dotnet.zip",4302,"uploads\u002Fskills\u002F3c0dda26-b141-4a06-a8ee-8a6230e3f7ef\u002Fazure-resource-manager-postgresql-dotnet.zip","9267bf3d794f62debec5ab419dadbbb23eed42fd010b3ed24b8012a0164e0a52","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":15418}]",{"code":43,"message":44,"data":45},200,"success",{"items":46,"stats":47,"page":50},[],{"averageRating":48,"totalRatings":48,"ratingCounts":49},0,[48,48,48,48,48],{"limit":51,"offset":48,"hasMore":52,"nextOffset":51,"ratedOnly":16},15,false]