BEGIN et END sont des mots réservés dans Oracle et SQL Server, mais vous ne savez pas pourquoi MySQL ne les considère pas comme tels .
Cependant, cette PGError semblerait indiquer que le moteur de base de données lui-même (et non tout environnement d'exécution lié à Ruby) a effectivement rejeté la requête en raison de la "fin".
Les mots réservés (et les noms contenant des espaces) peuvent être utilisés s'ils sont cités - peut-être qu'Active Record n'a pas cité les identifiants dans le SQL qui a été généré.
Je regarderais le journal dans MySQL (http://dev.mysql.com/doc/refman/5.5/en/query-log.html) et verrais les instructions générées.
Et puisque PGError signifie PostGreSQL et que vous avez mentionné Heroku (PostgreSQL 8.3) - je pense que c'est parce que END est en effet un mot réservé dans PostgreSQL :http://www.postgresql.org/docs/8.3/static/sql-keywords-appendix.html
http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=end