Для моего проекта Vapor я хочу в основном использовать одну базу данных Postgres. Однако для некоторых длительных запросов я хочу использовать отдельный клон той же базы данных, доступный только для чтения.
Документация для этого очень скудна. Как добавить другое подключение к базе данных рядом с существующей базой данных по умолчанию?
static func configureDatabase(_ app: Application) throws {
try app.databases.use(.postgres(url: "postgresql://user@localhost:5432/user"), as: .psql)
}
Как при выполнении запросов указать Fluent выполнять эти запросы во второй базе данных?
Магия нескольких баз данных заключается в DatabaseID. Вы можете определить новый экземпляр DatabaseID и зарегистрировать с ним соединение.
extension DatabaseID {
static let readOnly = DatabaseID("readOnly")
}
static func configureDatabase(_ app: Application) throws {
try app.databases.use(.postgres(url: "postgresql://user@localhost:5432/user"), as: .psql)
try app.databases.use(.postgres(url: "postgresql://user@localhost:5432/read_only"), as: .readOnly)
}
Затем, когда вы хотите выполнить запрос, вместо использования базы данных request.db используйте метод .db(_:) и передайте свой идентификатор:
User.query(on: request.db(.readOnly))
Потрясающе, спасибо! Просто добавлю это для потомков: этот вопрос касается версий Vapor и Fluent 4.x.