Promote PostgreSQL® read-only replica to primary#
On the Aiven console, if you use “service integrations” to create a read-only replica from an existing PostgreSQL or MySQL service, there is an option for the read-only replica service to promote to master using the Promote to master button under the Overview tab. While the Terraform documentation does not explicitly mention how to promote the read-only replica to master, you can remove the service integration between services to accomplish the task.
Let’s create Aiven for PostgreSQL® primary and a read-only replica using the following Terraform file:
resource "aiven_pg" "demo-postgresql-primary" {
project = var.project_name
service_name = "demo-postgresql-primary"
cloud_name = "google-northamerica-northeast1"
plan = "startup-4"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"
termination_protection = false
}
resource "aiven_pg" "demo-postgresql-read-replica" {
project = var.project_name
cloud_name = "google-northamerica-northeast1"
service_name = "demo-postgresql-read-replica"
plan = "startup-4"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"
termination_protection = false
service_integrations {
integration_type = "read_replica"
source_service_name = aiven_pg.demo-postgresql-primary.service_name
}
depends_on = [
aiven_pg.demo-postgresql-primary,
]
}
resource "aiven_service_integration" "pg-readreplica" {
project = var.project_name
integration_type = "read_replica"
source_service_name = aiven_pg.demo-postgresql-primary.service_name
destination_service_name = aiven_pg.demo-postgresql-read-replica.service_name
}
You can get the read-only replica promoted to master by removing the resource aiven_service_integration
, the code blocks service_integrations
and depends_on
under demo-postgresql-read-replica
resource above.
Once you remove these code blocks, your Terraform script will look something like this:
resource "aiven_pg" "demo-postgresql-primary" {
project = var.project_name
service_name = "demo-postgresql-primary"
cloud_name = "google-northamerica-northeast1"
plan = "startup-4"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"
termination_protection = false
}
resource "aiven_pg" "demo-postgresql-read-replica" {
project = var.project_name
cloud_name = "google-northamerica-northeast1"
service_name = "demo-postgresql-read-replica"
plan = "startup-4"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"
termination_protection = false
}
Run terraform apply
to have the read-only replica promoted to master and both Aiven for PostgreSQL services will run as independent services.
Note
In order for the promotion to master to succeed, the resource aiven_service_integration
must be used when creating the primary and read-only replica services and subsequently removed.