Neon
Neon's point-in-time restore lives inside Neon. To prove you can restore elsewhere, keep a logical backup in storage you control: AWS S3, Cloudflare R2, Scaleway, or any S3-compatible store.
1. Schedule a dump (GitHub Actions example)
name: neon-backup
on:
schedule: [{ cron: "0 2 * * *" }]
jobs:
dump:
runs-on: ubuntu-24.04
steps:
- run: sudo apt-get install -y postgresql-client-17
- run: |
pg_dump --format=custom --no-owner "$NEON_DATABASE_URL" -f orders.dump
aws s3 cp orders.dump "s3://acme-backups/orders/orders-$(date -u +%Y-%m-%dT%H-%M).dump"
env:
NEON_DATABASE_URL: ${{ secrets.NEON_DATABASE_URL }} # a direct (non-pooled) connection string
AWS_ACCESS_KEY_ID: ${{ secrets.BACKUP_WRITER_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.BACKUP_WRITER_SECRET }}
Use a pg_dump at least as new as your Neon PostgreSQL major.
2. Read-only key for Verestore
Create a separate key that can only list and read orders/. Use the policy for your store: AWS S3, Scaleway, or MinIO / S3-compatible. Never reuse the writer key.