gpt4 book ai didi

swift - 避免在新数据库上进行 Vapor 迁移

转载 作者:行者123 更新时间:2023-11-30 10:27:54 26 4
gpt4 key购买 nike

我已经创建了迁移以将字段添加到 Postgres 表中,它在现有数据库上按预期工作。但是,当我想使用新数据库运行相同的 Vapor 服务器时,它会在迁移时崩溃并显示“字段已存在”消息,这当然是可以理解的。但是如何维护服务器代码以便它可以与现有数据库和新数据库一起工作?

Fatal error: Error raised at top level: PostgreSQL Error: column "the_coloumn" of relation "User" already exists
- id: PostgreSQLError.server.error.check_for_column_name_collision
: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1100.8.280/swift/stdlib/public/core/ErrorType.swift, line 200

最佳答案

假设您已经部署了应用程序并进行了多次安装,那么您将需要保留表的两个版本。如果您还没有这样做,那么您可以随时删除第二个迁移(如果它只是添加字段)。正如您所发现的,该字段是在新安装的第一次迁移中创建的。

但是,如果您必须同时拥有两者,那么您将需要在原始迁移中替换对 AddProperties 的使用,该迁移使用显式字段列表构建表,减去您要添加的字段在第二次迁移中。单独字段创建的示例是:

extension User:Migration
{
static func prepare(on connection:MySQLConnection) -> Future<Void>
{
return Database.create(self, on:connection)
{
builder in
builder.field(for:\.id, isIdentifier:true)
builder.field(for:\.surname, type:.varchar(30, characterSet:nil, collate:nil))
builder.field(for:\.firstName, type:.varchar(30, characterSet:nil, collate:nil))
}
}
}

这将按照您之前在原始数据库中创建表时的方式构建表。然后您的第二次迁移将像以前一样进行。请参阅https://docs.vapor.codes/3.0/fluent/migrations/了解更多信息。

关于swift - 避免在新数据库上进行 Vapor 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59749447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com