我正在尝试使用Vapor将列索引添加到PostgreSQL表中。我发现有几个教程可以执行此操作,但是这些代码段均不适用于当前版本。
答案 0 :(得分:1)
据我所知,不可能用Fluent创建索引。 在我的Vapor3项目中,我对原始查询使用自己的扩展名 https://gist.github.com/MihaelIsaev/f6442bf3698572cd9170114f236c47c2
您可以这样使用它
extension CarBrand: Migration {
public static func prepare(on connection: Database.Connection) -> Future<Void> {
return Database.create(self, on: connection) { builder in
try addProperties(to: builder)
}.flatMap { _ in
return connection.addIndexes(\CarBrand.addedByUser, \CarBrand.createdAt)
}
}
}
希望它会有所帮助:)
答案 1 :(得分:1)
您可以在诸如以下的迁移中运行RAW SQL:
import FluentPostgreSQL
struct MigrationTest: PostgreSQLMigration {
static func revert(on conn: PostgreSQLConnection) -> EventLoopFuture<Void> {
return conn.future()
}
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
return conn.raw("CREATE INDEX test on some_table (field1, field2);").run()
}
}
要在一次行动中添加更多语句,我这样做是这样的:
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
let _ = conn.raw("create index if not exists idx_one (field1, field2);").run()
let _ = conn.raw("create index if not exists idx_two (field3, field4);").run()
return conn.future()
}
您无法一次运行添加更多语句!对于每个语句,新的let _ = conn.raw().run()
并在配置中
migrations.add(migration: MigrationTest.self, database: .psql)
这样做的好处是您可以添加部分索引等。