Two kinds of backup, two recovery stories
Logical backups (pg_dump) are SQL statements that recreate your data. They're portable across versions, selective (one database, one table), and human-readable. Slow to restore, fine for weekly archives or migrating between Postgres versions.
Physical backups (pg_basebackup) are byte-for-byte copies of the data directory. Fast to take and restore, can support point-in-time recovery (PITR) when combined with WAL archiving. The right answer for production.
The 3-2-1 rule, applied
Three copies of your data, on two different media, with one off-site. For a hosted Postgres: the live database + provider's snapshot + your own off-site copy (e.g. nightly logical dump to S3/R2/Backblaze). For self-hosted: live + local snapshot + remote.
Test the restore
An untested backup is a wish. Periodically restore your latest backup into a sandbox; verify row counts; run a smoke-test query. The first time you discover your backups are broken should not be the day production is down.