Liquibase is pretty good for managing database versions
We've found that maintaining a separate "changelog" file for each major release that collects the history of changes for that release and subsequent minor releases is easiest. We also use the Jira ticket # associated with a schema change as the ID of a changeSet, so we can tie changes to feature requests, bug reports, etc.
What I want is a DSL that is a platform-agnostic DSL: terse, typechecked, possibly "compiled" to some IR, with basics of semantic analysis, with support for (or at least awareness of) the quirks of the specific underlying platform.