是否可以在 Fluent with PostgreSQL 中使用不同的模式?
Is it possible to work with different schemas in Fluent with PostgreSQL?
我需要为不同的用户创建具有不同数量字段的 table。我想为每个用户创建一个模式,并在其中创建一组自定义的 table。我可以通过直接数据库查询来做到这一点。这将在具有给定名称的架构中创建 categories
table。例如:
func create(in schema: String, on db: Database) async throws {
let query: SQLQueryString = """
CREATE TABLE IF NOT EXISTS \(raw: schema).categories (
id uuid PRIMARY KEY,
name text NOT NULL,
...
);
"""
if let sql = db as? SQLDatabase {
try await sql.raw(query).run()
}
}
但我想用 Fluent 来做这件事。 (my_schema
架构及其必要的权限先前已在数据库中创建)但是以下代码在 public
架构中创建了 "my_schema.categories"
table:
func create(in schema: String, on db: Database) async throws {
try await db.schema("\(schema).categories")
.id()
.field("name", .string, .required)
...
.create()
}
是否可以在 Fluent 中使用不同的模式以及如何从不同的模式查询 tables?我将不胜感激。
希望我正确理解了您的具体要求。如果是这样,使用多个模式非常简单。
(1) 首先在您的配置中定义您的架构连接,确保指定 DatabaseID 和默认值:
app.databases.use(.postgres(connection_info), as: .psql, isDefault: true)
app.databases.use(.postgres(connection_info), as: .otherDB, isDefault: false)
(2) 运行 您的创建 table 迁移指定要将 table 添加到的数据库架构:
app.migrations.add(MigrateCategories())
app.migrations.add(MigrateSomeOtherTable(), to: .otherDB)
(3) 从不同的数据库模式中查询 tables:
categories.create(on: req.db())
someOtherTable.create(on: req.db(.otherDB))
现在你有两个数据库
- .psql 是默认的并且有一个 table 称为类别
- .otherDB 有一个 table 叫做 someOtherTable
使用数据库 ID 指示您要在何处创建新 table 以及要在何处进行 运行 查询。
是的,这是最近引入到 Fluent 中的。更新到最新版本,然后您可以在您的模型上添加一个新的静态 属性:
final class MyModel: Model {
static let schema = "table_name"
static let space = "schema_name"
// ...
}
有关详细信息,请参阅 the docs。
我需要为不同的用户创建具有不同数量字段的 table。我想为每个用户创建一个模式,并在其中创建一组自定义的 table。我可以通过直接数据库查询来做到这一点。这将在具有给定名称的架构中创建 categories
table。例如:
func create(in schema: String, on db: Database) async throws {
let query: SQLQueryString = """
CREATE TABLE IF NOT EXISTS \(raw: schema).categories (
id uuid PRIMARY KEY,
name text NOT NULL,
...
);
"""
if let sql = db as? SQLDatabase {
try await sql.raw(query).run()
}
}
但我想用 Fluent 来做这件事。 (my_schema
架构及其必要的权限先前已在数据库中创建)但是以下代码在 public
架构中创建了 "my_schema.categories"
table:
func create(in schema: String, on db: Database) async throws {
try await db.schema("\(schema).categories")
.id()
.field("name", .string, .required)
...
.create()
}
是否可以在 Fluent 中使用不同的模式以及如何从不同的模式查询 tables?我将不胜感激。
希望我正确理解了您的具体要求。如果是这样,使用多个模式非常简单。
(1) 首先在您的配置中定义您的架构连接,确保指定 DatabaseID 和默认值:
app.databases.use(.postgres(connection_info), as: .psql, isDefault: true)
app.databases.use(.postgres(connection_info), as: .otherDB, isDefault: false)
(2) 运行 您的创建 table 迁移指定要将 table 添加到的数据库架构:
app.migrations.add(MigrateCategories())
app.migrations.add(MigrateSomeOtherTable(), to: .otherDB)
(3) 从不同的数据库模式中查询 tables:
categories.create(on: req.db())
someOtherTable.create(on: req.db(.otherDB))
现在你有两个数据库
- .psql 是默认的并且有一个 table 称为类别
- .otherDB 有一个 table 叫做 someOtherTable
使用数据库 ID 指示您要在何处创建新 table 以及要在何处进行 运行 查询。
是的,这是最近引入到 Fluent 中的。更新到最新版本,然后您可以在您的模型上添加一个新的静态 属性:
final class MyModel: Model {
static let schema = "table_name"
static let space = "schema_name"
// ...
}
有关详细信息,请参阅 the docs。