Несколько баз данных в Vapor

Для моего проекта Vapor я хочу в основном использовать одну базу данных Postgres. Однако для некоторых длительных запросов я хочу использовать отдельный клон той же базы данных, доступный только для чтения.

Документация для этого очень скудна. Как добавить другое подключение к базе данных рядом с существующей базой данных по умолчанию?

static func configureDatabase(_ app: Application) throws {
    try app.databases.use(.postgres(url: "postgresql://user@localhost:5432/user"), as: .psql)
}

Как при выполнении запросов указать Fluent выполнять эти запросы во второй базе данных?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
0
388
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Магия нескольких баз данных заключается в 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.

winsmith 23.12.2020 16:49

Другие вопросы по теме