如何在postgres表中添加索引?

时间:2019-08-07 15:59:28

标签: postgresql vapor

我正在尝试使用Vapor将列索引添加到PostgreSQL表中。我发现有几个教程可以执行此操作,但是这些代码段均不适用于当前版本。

2 个答案:

答案 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)

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