Start here. This is the direct spoken answer to practice first.
Why this question matters
A rolling deployment means old and new code run at the same time, so the database change must be compatible with both versions. I use expand-and-contract rather than making a breaking schema change in one step.
The expand release adds nullable columns, new tables, or compatible indexes first. Application code can then write both shapes or tolerate both while a bounded backfill runs. After every replica uses the new contract and data is verified, a later release removes the old column or behavior. This keeps rollback possible during the transition.