我知道schema.rb文件是一个ruby文件,它在运行rake迁移时被创建和修改,但是struct.sql呢。
我在一些项目schema.rb和其他的struct.sql和一些两个文件中看到过,他们在哪里配置要创建的文件。
两者之间究竟有什么区别。
生成的structure.sql是否特定于特定数据库。
答案 0 :(得分:37)
主要区别在于schema.rb
是数据库的Ruby表示,它通常与数据库无关。 structure.sql
是数据库的SQL表示形式,它取决于您选择的特定数据库。
如果您拥有所需的特定数据库功能且无法由schema.rb
表示,则只能使用该结构。例如,在过去,有些人将schema.rb
替换为structure.sql
,以便在数据库级别使用PostgreSQL JSONB字段或外键约束。
迁移现在支持这两项功能,因此您不再需要切换到structure.sql
(在这些情况下)。
一般情况下,我建议您使用schema.rb
。