You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Terraform在Azure PostgreSQL数据库中创建Schema

Azure PostgreSQL 灵活服务器通过Terraform创建Schema实现方案

azurerm提供方仅能管控云平台层面的PostgreSQL资源,包括灵活服务器实例、数据库、防火墙规则、备份配置等,无法操作数据库内部的schema、角色、表、权限这类对象。数据库内部对象的管理需要搭配独立的PostgreSQL提供方实现,两个提供方可在同一份Terraform配置中协同工作,不存在冲突,完整配置逻辑如下:

  1. 声明PostgreSQL提供方依赖,配置数据库连接参数指向你创建的Azure PostgreSQL灵活服务器,显式声明资源依赖,等云侧资源全部就绪后再初始化数据库连接
  2. 调用postgresql_schema资源创建目标schema,关联到已经创建完成的业务数据库

如果你现有配置中已经定义过terraform和required_providers块,仅需在原有块中追加postgresql提供方的声明即可,无需重复配置azurerm相关内容。

需追加的配置代码

# 声明Terraform依赖的提供方
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">=3.0.0"
    }
    postgresql = {
      source  = "cyrilgdn/postgresql"
      version = ">=1.21.0"
    }
  }
}

# 配置PostgreSQL提供方连接参数
provider "postgresql" {
  host            = azurerm_postgresql_flexible_server.postgreSQL.fqdn
  port            = 5432
  database        = azurerm_postgresql_flexible_server_database.postgreSQLDB.name
  username        = "${var.postgreSQLAdmin}@${azurerm_postgresql_flexible_server.postgreSQL.name}"
  password        = var.password
  sslmode         = "require"
  connect_timeout = 15

  depends_on = [
    azurerm_postgresql_flexible_server.postgreSQL,
    azurerm_postgresql_flexible_server_database.postgreSQLDB,
    azurerm_postgresql_flexible_server_firewall_rule.postgreSQLFirewallRule
  ]
}

# 创建目标Schema,示例创建名为app_schema的schema,可按需修改名称与所属所有者
resource "postgresql_schema" "app_schema" {
  name  = "app_schema"
  owner = var.postgreSQLAdmin
}

配置注意事项

  • 你当前配置的防火墙规则仅放行Azure内部服务流量,如果执行Terraform的设备不在Azure网络内,需要额外添加防火墙规则放行你执行环境的公网IP,否则会出现数据库连接超时
  • 必须显式配置depends_on依赖关系,避免Terraform在PostgreSQL服务未完全启动、防火墙规则未生效时提前尝试连接数据库
  • Azure PostgreSQL强制要求SSL连接,提供方配置里的sslmode参数不能省略,必须设置为require
  • 管理员用户名需要拼接@<服务器名称>后缀,否则会出现身份认证失败

内容的提问来源于stack exchange,提问作者Aatif Akhter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:27:33