All posts
AWS Amplify

Migrating Amplify's DynamoDB Data to Postgres: Why Lists Scan, Why Pages Come Back Empty, and How to Move It

By

November 2, 2026

6 min read

Amplify list queries use DynamoDB scans, and DynamoDB applies filters after reading up to 1 MB, so a filtered page costs a full read and can return almost nothing. When the data is relational, Postgres is the better home. How to export, transform, keep the two in sync and switch.

Amplify Exit
Amazon DynamoDB
PostgreSQL
AppSync
Migration

Amplify's data docs say the list operation uses DynamoDB scan operations. DynamoDB's docs explain the consequence: a Scan reads up to 1 MB, then applies the filter, and Limit counts items before the filter. Read capacity is charged for everything read, matching or not.

So a screen that lists "my open orders" from a large table reads pages of other people's orders, keeps the few that match, and returns a nextToken for the client to try again. It works at launch. It gets slower and more expensive every month after.

Want a second opinion on this for your system?

Book a free 30-minute call. You'll leave knowing what we'd do first and roughly what it costs, whether or not you hire us.

DynamoDB or Postgres

Keep in DynamoDB when

Move to Postgres when

Access is by key: a user's settings, a session, a device

Screens filter, sort and join across entities

Traffic is spiky and huge, and the queries are few and known

People ask for reports and counts

You will design the keys and indexes on purpose

The model is relational and will keep changing

Moving the data

  1. Turn on point-in-time recovery and export each table to S3. Exports don't consume read capacity or affect the live table.

  2. Write the transform as code and run it against the export: types, relationships Amplify stored as id fields, timestamps, and soft-deleted rows.

  3. Load Postgres, then keep it current: replay DynamoDB Streams from the export time, or run incremental exports on a schedule if a few minutes of lag is acceptable during the overlap.

  4. Compare counts and checksums per entity every day of the overlap. A migration is done when the numbers match without anyone looking.

  5. Switch reads, then writes, screen by screen. Keep the stream running in reverse only if something still reads DynamoDB.

hoolco Monthly Review

Once a month: what changed in tech that month and what it means for you, from cloud and AI to security and the tools you build with. Every item links to its source. No sales pitch, unsubscribe in one click.

As of November 2, 2026. Provided as is, for general information, and accurate to the best of our knowledge on the date shown. Not legal, compliance, tax, financial or other professional advice. Prices, limits and vendor services change; check current vendor documentation before relying on anything here. Terms of use.