Upgrade PostgreSQL version
This guide explains how to upgrade PostgreSQL between major versions via
Terraform, and how to maintain a correct Terraform configuration to avoid
state drift when auto_minor_version_upgrade
is set to true
.
This guide takes into consideration an upgrade based on a standard distribution
of PostgreSQL via the Golden Path PostgreSQL template
(in this document referred to as postgres_aurora_serverless.tf
).
The guide below will do a upgrade from 13.11
to 15.3
.
Before you begin
- Familiarize yourself with the AWS PostgreSQL releases available and decide on upgrade version
- Identify any major customizations done to
postgres_aurora_serverless.tf
that you need to consider (example: read-replica setup) - Plan a sequence for your upgrade: development environment first, then plan accordingly before upgrading a production database
- Consider doing an incremental upgrade via PostgreSQL version 14 if you are going from 13 to 15
- Make sure the backup retention period is set to a number greater than 0. Verify this by going to the AWS console > RDS > Databases > (your database) > Maintenance & backups > Backup > Automated backups. The default retention
period in Golden Path when using
postgres_aurora_serverless.tf
is 1 day.
Step 1: Update configuration
Set the following variables in postgres_aurora_serverless.tf
engine_version = "15.3"
Engine version
If you don't specify the minor version you will get the current default version of PostgreSQL (not necessarily the latest).
allow_major_version_upgrade = true
Allow major version upgrade
Without this set to true
you will not be able to upgrade between major
versions.
Step 2: Apply changes
Plan, review, then apply the updated configuration
Upgrade time
Keep a note of how long time the actual upgrade takes. This will help in planning the production upgrade. Be aware that a production database can be larger than a development one, and as such can take longer to upgrade.
Step 3: Verify upgrade
Verify that your application is working as expected, and that you can
connect via ok forward
.
Step 4: Verify pre-upgrade snapshot of database
Go to RDS > Snapshots in the AWS console and identify the existence of a pre-upgrade snapshot.
The snapshot have the following naming convention:
preupgrade-{database-name}-{from-version}-to-{to-version}-{date}
If there are no snapshot, and you require one: ensure that
backup_retention_period
is set to 1 or higher.
Step 5: Reset variables
If auto_minor_version_upgrade
is set to false, and you explicitly set
engine_version
to a minor version in postgres_aurora_serverless.tf
,
then this step is not applicable.
Set the following variables in postgres_aurora_serverless.tf
engine_version = null
Engine version
With auto_minor_version_upgrade
set to true
and engine_version
is set
to a major version, then AWS will choose the default
minor version, which
can be something different from the latest
version you will get when AWS
does automatic minor version upgrade.
allow_major_version_upgrade = false
Allow major version upgrade
It is good practice to set this to false
to avoid any major version
upgrade that can happen if someone sets (by mistake) a different major
version in engine_version
.
Step 6: Commit changes
Commit and push all changes to your IaC repository.