Postgres throw ``ProgrammingError`` and ``OperationalError``, the former if it is unable to execute and the latter if it is a bad value. I believe it can also throw ``DataError``. Not sure if its worth differentiating though as we want to ``rollback`` regardless