如何将索引添加到 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)

这样做的好处是可以添加部分索引等