我试图添加一个独特的索引,从四个相关表的外键创建:
add_index :studies,
["user_id", "university_id", "subject_name_id", "subject_type_id"],
:unique => true
数据库对索引名的限制导致迁移失败。下面是错误信息:
索引名' index_studes_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id '表'studies'太长;限制为64个字符
我该怎么处理呢?我可以指定不同的索引名吗?
为add_index提供:name选项,例如:
add_index :studies,
["user_id", "university_id", "subject_name_id", "subject_type_id"],
unique: true,
name: 'my_index'
如果对create_table块中的引用使用:index选项,则它的值与add_index相同:
t.references :long_name, index: { name: :my_index }
为add_index提供:name选项,例如:
add_index :studies,
["user_id", "university_id", "subject_name_id", "subject_type_id"],
unique: true,
name: 'my_index'
如果对create_table块中的引用使用:index选项,则它的值与add_index相同:
t.references :long_name, index: { name: :my_index }
在PostgreSQL中,默认限制为63个字符。因为索引名必须是唯一的,所以有一点约定是很好的。我使用(我调整了这个例子来解释更复杂的结构):
def change
add_index :studies, [:professor_id, :user_id], name: :idx_study_professor_user
end
正常指数应该是:
:index_studies_on_professor_id_and_user_id
逻辑是:
Index变成idx
单表名
无连词
没有_id
字母顺序排列
这通常是可行的。