yes, you're using "end" as column name....this is not allowed in postgres and oracle, and also on mssql.
Bites me every time, but actually a good practice would be to create the model within a connection made this way: db = DAL(uri, check_reserved_keyword=['all']) it will stop your model creation if find some tablename/columnname that is not allowed in all db engines, so you can have a "portable" db schema between different db engines. Better start with a "universally accepted" model also in local developments with sqlite than having those errors when trying to migrate to your production server. PS: check_reserved_keyword take a list of db engines to check against, so if you're worried only to "be portable" within postgres and sqlite, you can replace ['all'] with ['common', 'sqlite', 'postgres']