Databases are notoriously fussy to work with. Postgres is no exception. Though the software itself may be pretty solid, stuff like major version upgrades or migrations to “the cloud” (or back to on-prem) are really tricky to do without significant and costly downtime. Though there’s tools out there to make this process easier, many of these simply don’t work for anything more than small test databases, and will silently corrupt tables or fail spectacularly in real-world scenarios.