如何将索引添加到 postgres table?
How to add an index to a postgres table?
我正在尝试使用 Vapor 将列索引添加到 PostgreSQL table。我找到了几个这样做的教程,但是这些代码片段中的 none 适用于当前版本。
据我所知,无法使用 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)
}
}
}
希望对您有所帮助:)
您可以 运行 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()
}
您不能在一个语句中添加更多语句 运行!对于每个语句 new let _ = conn.raw().run()
并在配置中
migrations.add(migration: MigrationTest.self, database: .psql)
这样做的好处是可以添加部分索引等
我正在尝试使用 Vapor 将列索引添加到 PostgreSQL table。我找到了几个这样做的教程,但是这些代码片段中的 none 适用于当前版本。
据我所知,无法使用 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)
}
}
}
希望对您有所帮助:)
您可以 运行 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()
}
您不能在一个语句中添加更多语句 运行!对于每个语句 new let _ = conn.raw().run()
并在配置中
migrations.add(migration: MigrationTest.self, database: .psql)
这样做的好处是可以添加部分索引等