在Migrate中如何创建索引?
laowu 2022-01-06 14:14:57
在Migrate中如何创建索引?我在官方文档中没找到对应的答案。
1个回答
1
Migrate的原生语法是不支持直接创建索引的。
我们可以通过SQLDatabase的create(index:)方法来创建索引
我简单封装了一个扩展方法:
extension Database {
var sqlDatabase: SQLDatabase? {
return self as? SQLDatabase
}
func create(indexOnColumn column: String, table: String, unique: Bool = false) async throws {
guard let db = self as? SQLDatabase else {
return
}
let sql = db.create(index: "index_" + table + column + "x")
.on(table)
.column(column)
if unique {
sql.unique()
}
try await sql.run()
}
func remove(indexOfColum column: String, table: String) async throws {
guard let db = sqlDatabase else {
return
}
return try await db.raw(.init(
"""
DROP INDEX \(table)_\(column)_idx
"""
)
).run()
}
}
在migration中可以这样使用:
prepare:
try await database.create(indexOnColumn: "target_id", table: "target_check_ins")
2022-01-06 14:31:38
更多