BEGIN i END są słowami zastrzeżonymi w Oracle i SQL Server, ale nie wiem, dlaczego MySQL nie uważa ich za takie .
Jednak ten PGError wydaje się wskazywać, że sam silnik bazy danych (a nie żadne środowisko uruchomieniowe związane z Rubym) rzeczywiście odrzuciło zapytanie z powodu „koniec”.
Zarezerwowane słowa (i nazwy zawierające spacje) mogą być użyte, jeśli są cytowane - być może Active Record nie zacytował identyfikatorów w wygenerowanym SQL.
Spojrzałbym na dziennik w MySQL (http://dev.mysql.com/doc/refman/5.5/en/query-log.html) i zobaczyłby wygenerowane instrukcje.
A skoro PGError oznacza PostGreSQL, a wspomniałeś o Heroku (PostgreSQL 8.3) - myślę, że dzieje się tak dlatego, że END jest rzeczywiście zastrzeżonym słowem w PostgreSQL:http://www.postgresql.org/docs/8.3/static/sql-keywords-appendix.html
http://www.petefreitag.com/tools/sql_reserved_words_checker/?word=end