我在开发中的rails应用程序上有一个包含sqlite3数据库的ruby。在早期开发中,应用程序中没有任何表具有索引的字段(除了始终被索引的ID之外),并且在部署到Heroku时,应用程序可以找到。
然后我改变了这三个表,使得每个表都有一个字段(除了被索引的ID之外)已经被索引为唯一的,并且我仍然有一个表没有索引除了ID之外的字段。即使表中没有记录,该应用程序也可以在开发中正常工作,但是当使用postgres将应用程序推送到Heroku时,应用程序会在每个索引表上失败,但不会在未编制索引的表上失败。
加载应用程序时没有错误消息,当我运行“heroku run rake db:migrate”时没有错误。
日志中的错误消息是“PG :: UndefinedTable:ERROR:relation”[tablename]“不存在”,看起来表格不存在。有没有人有任何想法如何找到问题或修复它?
我尝试在本地完全删除和重建数据库,并在Heroku上多次删除应用程序和数据库并重新部署,但无济于事。
我真的很有智慧!感谢任何帮助!
提前感谢你,
答案 0 :(得分:0)
您正在混合使用引用和未引用的标识符,这可能是在开发中使用MySQL和在生产中使用PostreSQL的副作用。
正如docs州......
引用标识符也会使其区分大小写,而不带引号的名称始终折叠为小写。例如,标识符FOO,foo和" foo" PostgreSQL被认为是相同的,但" Foo"和" FOO"不同于这三者和彼此。 (在PostgreSQL中将不带引号的名称折叠为小写字母与SQL标准不兼容,后者表示不带引号的名称应折叠成大写。因此,foo应该等同于" FOO" not" foo"根据标准。如果你想编写便携式应用程序,建议你总是引用一个特定的名称或从不引用它。)
Oracle行为相似,并且通常不鼓励使用带引号的标识符,因为它可能导致这种问题。