# Aurora PostgreSQL

> Peace of mind and scale, at a price. My choice when the client must stay all-AWS.

- Verdict: Use when it fits
- Vendor: AWS
- Layer: [Data](https://cloudlesslabs.com/stack/layers/data.md). Job: AWS-native Postgres
- Last reviewed: 18 October 2026, by Nicolas Dao (Cloudless Labs, Sydney)
- Web page: https://cloudlesslabs.com/stack/aws-aurora/. The whole stack in one file: https://cloudlesslabs.com/stack/brief.md

Aurora gives me peace of mind and scales well. It's also the most expensive way to run Postgres I know, and the connection story for Lambda (RDS Proxy) is the part I like least.

## Use it when

- The client is AWS-only, or needs IAM, VPC-only networking and AWS compliance.
- Bedrock Knowledge Bases with SQL access to the same chunks (Aurora is the only Postgres they support).
- Joining live tables with the data lake in one SQL query: the aurora_analytics extension (DuckDB inside, since 30 September 2026) reads Parquet and Iceberg in S3 as foreign tables, at no extra charge. Read-only, PostgreSQL 17.11+ or 18.6+.

## Don't use it when

- New, small or spiky apps: Neon is cheaper and simpler.

## Pricing

Serverless v2 kept at 0.5 ACU always-on ≈ $73 a month. RDS Proxy adds at least about $26 a month (provisioned) or about $146 (Serverless v2, minimum 8 ACU).

## In my words: what hurts

- Very expensive.
- RDS Proxy is extra config, and its pools can still be exhausted.

## Gotchas, with fixes

- **Gotcha:** RDS Proxy 'pins' a session to one connection when it sees SET, prepared statements, temporary tables, advisory locks or statements over 16 KB. Pinned sessions exhaust the pool.
  **Fix:** Watch the DatabaseConnectionsCurrentlySessionPinned metric and remove the pinning causes. Or move HTTP logic to Lambda Web Functions, which share one pool across up to 128 requests.
- **Gotcha:** Serverless v2 can pause at 0 ACU, but resuming takes about 15 seconds (30+ after a day paused).
  **Fix:** Don't pause production databases that serve users.

## Provisioning

Official Pulumi package · Official Terraform provider

@pulumi/aws rds.Cluster / ClusterInstance.

## Instead, consider

- [Neon (serverless Postgres)](https://cloudlesslabs.com/stack/neon/index.md): Everything else.

## Worked examples

- [IoT ingestion into Postgres](https://cloudlesslabs.com/stack/guides/iot-ingestion/index.md): 5,000 devices send a reading every minute. Where does the money go?
- [pgvector or S3 Vectors?](https://cloudlesslabs.com/stack/guides/vectors/index.md): Where should my embeddings live?
- [Athena or DuckDB?](https://cloudlesslabs.com/stack/guides/data-lake/index.md): How should I query my data lake, and what changed when AWS bought DuckDB's company?

## Where it fits

- [A database](https://cloudlesslabs.com/stack/use-cases/database.md): pick 2. When the client must stay all-AWS.
- [A data lake](https://cloudlesslabs.com/stack/use-cases/data-lake.md): pick 5. If the app already runs on Aurora: join live tables with the lake in one SQL query (DuckDB inside).

## In The Stack Weekly

- [Week 43: Aurora PostgreSQL reads Iceberg and Parquet](https://cloudlesslabs.com/weekly/2026-w43/index.md), worth a pilot

## Sources

- [Aurora pricing](https://aws.amazon.com/rds/aurora/pricing/)
- [Aurora PostgreSQL direct querying of Iceberg and Parquet](https://aws.amazon.com/blogs/aws/amazon-aurora-postgresql-now-supports-direct-querying-of-apache-iceberg-and-parquet-data-in-your-data-lake/)

## Related

- [Data](https://cloudlesslabs.com/stack/layers/data.md): every tool in this layer, with its verdict
- [The whole stack in one file](https://cloudlesslabs.com/stack/brief.md): every use case and tool, for questions that span many
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
