Amazon RDS for PostgreSQL recently introduced delayed read replicas, a long-awaited feature that provides an additional layer of protection against logical errors while still offering the traditional benefits of replication. For database administrators and architects who are focused on building highly available and resilient systems, this addition helps cover scenarios that previously required painful restores from snapshots or point-in-time recovery (PITR). This has been around for a while on MySQL (https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.DelayReplication.html) but very few DBAs seem to realise it exists, so hopefully the new release of PostgreSQL support will bring it to more people’s attention.
To understand where delayed replicas fit in, it’s useful to step back and look at the types of failures we need to protect against and the tools we’ve had until now.
Two Categories of Failures
When designing HA/DR strategies, failures broadly fall into two categories:
- Server/Disk Failures (Infrastructure Failures) These are hardware or availability-zone level issues: an EC2 host dies, a storage volume goes bad, or an AZ experiences an outage. They’re typically rare but can be disruptive if you don’t have redundancy.
- Protection strategies here are about keeping a synchronous copy of your data, so you can fail over without data loss.
- Logical Failures (Human/Application Errors) These are much more common: someone drops the wrong table, a bad migration script runs, or an application bug deletes millions of rows. In these cases, a synchronous replica isn’t helpful—because the replica will faithfully replicate the mistake.
- Protection strategies here require the ability to rewind time or access a lagged copy of the data before the error was applied.
Historically, AWS offered strong solutions for the first category but more limited options for the second.
Traditional HA/DR in RDS PostgreSQL
RDS has long offered a couple of key mechanisms:
- Multi-AZ Deployments In Multi-AZ, data is synchronously written to a standby in another Availability Zone. If the primary fails, RDS can promote the standby with minimal downtime and no data loss. This is excellent for infrastructure failures but useless against logical mistakes, since the standby gets the same bad writes immediately.
- Read Replicas Traditionally, RDS PostgreSQL supports asynchronous read replicas. These lag slightly behind the primary and are great for scaling reads or for manual promotion in a disaster recovery scenario. However, the lag is usually measured in milliseconds or seconds, not enough to save you from a fat-fingered DELETE that just wiped a table.
- Point-in-Time Recovery (Backups and WAL Archives) If a logical error happens, your recourse has been to restore from a snapshot and roll forward using WAL archives to a point before the mistake. This works, but it can take hours to spin up and replay, and the restored database lives in a new cluster that you then need to integrate back into your environment.
This gap is exactly where delayed replicas come in.
What Is a Delayed Read Replica?
A delayed read replica is just like a normal asynchronous replica, except it intentionally lags behind the primary by a fixed delay that you configure—anywhere from 1 minute to 72 hours.
Instead of replaying WAL records immediately, the replica waits for the configured duration before applying them. The result: if someone drops a table at noon, and your replica has a 1-hour delay, you can stop replication at 12:59 PM, keeping a copy of the data as it looked at 11:59 AM.
This gives you a powerful recovery option for logical failures without the pain of PITR restores.
With delayed replicas, you essentially have a rolling time machine:
- Immediate Infrastructure Protection Use Multi-AZ or synchronous replicas to handle disk/server failures.
- Guard Against Human Error Use a delayed replica to preserve a known lag window where errors haven’t yet been applied.
The beauty is that this happens continuously, without needing manual snapshots or restores.
How It Fits With Other Replication Options
When planning an HA/DR strategy, you’ll now likely combine multiple approaches:
- Multi-AZ Deployment for zero-data-loss protection against infrastructure failures.
- Standard Read Replicas for scaling reads and providing disaster recovery in another region.
- Delayed Read Replicas for protection against logical failures, giving you hours or even days of rewind capability.
The combination means you can protect against both categories of failures without waiting on a time-consuming PITR restore.
Operational Considerations
A few points to keep in mind when deploying delayed replicas:
Promotion: A delayed replica can be promoted to a standalone database at any time, just like a normal read replica.
Lag Window Tradeoff: A longer delay gives more safety against unnoticed mistakes but reduces freshness if you want to use the replica for reporting.
Stopping Replication: If you detect a logical error, you need to act quickly—pause replication before the delay window expires.
Region Placement: Like other replicas, delayed replicas can be in the same or different region. For DR, placing them in another region gives the best protection.
Conclusion
Delayed read replicas in RDS PostgreSQL close a long-standing gap in AWS’s managed database offerings. Until now, recovering from logical errors usually meant lengthy point-in-time restores. With this new feature, you can maintain a live, automatically updated copy of your database that always reflects the past as of minutes or hours ago.
By combining Multi-AZ for synchronous protection, standard read replicas for scalability and DR, and delayed replicas for logical error recovery, architects can now design systems that cover both hardware and human failures comprehensively—without needing to fall back on slow and disruptive restores from backup.
For PostgreSQL users on RDS, this represents a major step forward in resilience, and one more reason to lean on managed services rather than building these mechanisms yourself.
The official AWS release is here: https://aws.amazon.com/about-aws/whats-new/2025/08/amazon-rds-postgresql-delayed-replica/
![]()