This is a misuse of the API. See the discussion [here](https://github.com/doctrine/dbal/pull/361). I think the right solution for this is to patch the method for altering the table in the platform. The execution order should be fixed so that indexes and constraints will get dropped before altering columns. [This line](https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php#L511) seems to be the problem. I think adopting [MySQL's logic](https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php#L582-L586) should fix it.