如何通过Terraform将apg_plan_mgmt加入AWS RDS预加载库?
问题描述
应用Terraform计划时触发PostgreSQL报错:
Error: pq: apg_plan_mgmt not in shared_preload_libraries
尝试在RDS集群参数组中手动添加该配置:
parameter { name = "shared_preload_libraries" value = "apg_plan_mgmt,pg_stat_statements" apply_method = "pending-reboot" }
但收到AWS的参数值无效错误:
Terraform v1.6.2 on linux_amd64 Initializing plugins and modules... aws_rds_cluster_parameter_group.qpm_cluster_parameter_group: Creating... ╷ │ Error: InvalidParameterValue: Invalid parameter value: apg_plan_mgmt for: shared_preload_libraries allowed values are: auto_explain,orafce,pgaudit,pg_similarity,pg_stat_statements,pg_hint_plan,pg_prewarm,plprofiler,pglogical,pg_cron │ status code: 400, request id: 3063e79b-0344-4d2b-8433-61d2cddc2fd4
尝试创建扩展后仍触发最初的报错,需解决如何通过Terraform配置apg_plan_mgmt预加载的问题。
解决步骤
- 确认引擎版本要求:apg_plan_mgmt仅支持PostgreSQL 13.7/R1、14.2/R1及更高版本的AWS RDS实例/集群,先检查Terraform中配置的
engine_version是否符合要求。 - 启用Performance Insights:apg_plan_mgmt是AWS Performance Insights的组件,无法手动添加到
shared_preload_libraries,必须通过启用Performance Insights让AWS自动配置该参数。在Terraform的RDS集群或实例资源中添加以下配置:# 针对RDS集群 resource "aws_rds_cluster" "example" { # 其他已有配置... performance_insights_enabled = true performance_insights_retention_period = 7 # 可根据需求设置,最小值为7天 } # 针对单RDS实例 resource "aws_db_instance" "example" { # 其他已有配置... performance_insights_enabled = true performance_insights_retention_period = 7 } - 移除手动添加的参数:删除集群参数组中手动添加的
apg_plan_mgmt配置,保留其他允许的预加载库(如pg_stat_statements)即可。 - 重启RDS实例/集群:启用Performance Insights后,需要重启RDS资源让AWS自动将
apg_plan_mgmt加入到shared_preload_libraries中。Terraform会在应用配置后提示需要重启,或者可通过apply_method = "pending-reboot"让参数修改在重启后生效。 - 创建apg_plan_mgmt扩展:重启完成后,在数据库中执行创建扩展的SQL(可通过Terraform的
null_resource结合local-exec实现):resource "null_resource" "create_apg_extension" { depends_on = [aws_rds_cluster.example] # 或对应的实例资源 provisioner "local-exec" { command = "psql -h ${aws_rds_cluster.example.endpoint} -U ${var.db_username} -d ${var.db_name} -c 'CREATE EXTENSION IF NOT EXISTS apg_plan_mgmt;'" } }
内容的提问来源于stack exchange,提问作者sf8193
相关产品推荐
相关产品推荐

