问题标签 [schema-migration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
761 浏览

django - Django South - 同时进行模式和数据迁移

在模式迁移中是否可以对 South 执行以下操作?

看到prev_orm这将允许我访问f.bar,并做所有在一个。我发现必须为此编写 3 个迁移非常繁重......

我知道这不是“做事的方式”,但在我看来,这真的会更干净。

顺便说一句,这样做会有真正的问题吗?

0 投票
0 回答
170 浏览

database - 如何使用 Flyway 处理 RDBMS 重大更改?

给定一个使用Flyway设置的现有数据库,我想将此数据库迁移到我的 RDBMS 的最新版本(例如 Postgres 9.2->9.3)。

如果数据库供应商更改了其 API 中的某些内容并且我已经运行的迁移之一现在产生了错误,我将无法使用相同的迁移脚本设置具有 9.3 版的新开发数据库。我将不得不修改失败的迁移脚本。

然后,如果我将生产数据库升级到 postgres 9.3,并尝试运行一些新的迁移,那么现有的生产数据库将不允许我迁移,因为已修改的迁移脚本的校验和不匹配。

解决这种情况的最佳方法是什么?我目前看到的唯一方法是手动更改生产数据库的 schema_version 表中的校验和值。

0 投票
1 回答
75 浏览

django - 南方不承认添加的模型字段?

我和我的队友使用 South 已经有一段时间了,问题非常少。我们现在刚刚遇到了一个问题,South 没有识别我们添加的模型字段。

当我跑

我不断收到“似乎没有任何改变”。

杂项但随机的细节:
South==0.8.2
我检查了数据库表,该列确实不存在。

更新 #1:我们创建了自己的迁移文件来添加它并且它有效。我们只是想弄清楚为什么没有使用架构迁移,所以我们不必继续手动进行..

更新#2:我觉得这可能与我们使用的字段类型有关..?我尝试添加一个 charfield 并且南工作,但是当涉及到 URL 字段时,没有任何识别......

答:我发现出了什么问题。Teammate 使用的变量名称也是方法名称。还不能回答我自己的问题,因为我没有足够的代表,但我会在可以的时候回答。

0 投票
1 回答
334 浏览

django - Django South:自动架构迁移不适用于添加多对多

我对南方很陌生。我正在处理一个朋友项目,他似乎已经完成了一些迁移。

我有一个模型,我正在尝试向它添加一个额外的 ManyToMany 字段。这是owned_geofences我要添加的字段的类:

该应用程序名为“个人资料”。首先我这样做:

酷,它似乎奏效了。然后我这样做了:

好的。现在应该工作正常吗?

嗯,它似乎确实奏效了。我进行了一些测试,然后..

最重要的是,出于好奇,我跑了:

为什么这些不同步?我以为我搞砸了,所以我接受了上面的建议并跑了:

有人可以解释一下这里发生了什么吗?

0 投票
1 回答
3727 浏览

sql-server - 如何在多架构 MS SQL Server 环境中使用 Flyway?

我们有一个使用“多模式”策略的多租户 SaaS 应用程序,即每个客户在同一个数据库实例中都有专用的模式。我们使用 MS SQL Server 作为数据库,它通过 SQL Server“用户”的“默认模式”设置在模式之间切换。例如客户 A、B 和 C 在 SQL Server 中配置如下:

  • 客户 A:user_A使用默认架构schema_A
  • 客户 B:user_B使用默认架构schema_B
  • 客户 C:user_C使用默认模式schema_C……等等。

在我们的应用程序中,我们通过在每次查询之前执行以下 SQL 在连接上设置 SQL Server“用户”,将 DataSource 连接切换为指向每个客户的正确模式:

在尝试使用 Flyway 以全局方式管理模式版本的状态时,这给我们带来了一些问题。由于 flyway 的架构支持仅接受架构名称列表,因此这不适用于 MS SQL Server。Flyway 在 DataSource 配置提供的用户的默认模式上执行迁移;在 SQL Server 的情况下,“用户”需要因客户/模式而异。

理想情况下,我们会有一个这样的回调FlywayCallback.beforeEachSchemaMigrate(Connection),让我们通过在每个模式的每次迁移之前执行“以用户身份执行”语句来设置每个模式所需的用户上下文。不知道为什么没有那个钩子?

flyway 的另一个缺点是在模式列表中使用第一个模式的约定,作为持有schema_version表的模式。这在基于 SQL Server 的多租户环境中是不需要的。因为我们不能假设包含schema_version表的模式也是真正的客户模式。请记住,在像我们这样的 SaaS 应用程序中,每个租户/客户的模式是动态创建/销毁的。当用户注册时,配置过程的一部分会根据一些约定创建新模式。所以模式列表对我们来说是动态的。

理想情况下,我们可以告诉 Flyway 使用给定的模式来创建schema_version表,而无需尝试在该模式上运行迁移。通常这将是dbo架构(这是 SQL Server 中的默认架构)。我们使用 dbo 模式来保存跨所有租户的全局表,schema_version 将被视为全局表。

所以最终在成功迁移后,我们的数据库应该如下所示:

上述所有模式都处于相同的“状态”,由dbo.schema_version表指示和控制。

这目前可能吗?

0 投票
11 回答
37163 浏览

python - 如何在两个 Django 应用程序之间移动模型(Django 1.7)

所以大约一年前我开始了一个项目,和所有新开发人员一样,我并没有真正关注结构,但是现在我与 Django 一起更进一步,它开始出现我的项目布局主要是我的模型在结构上很糟糕.

我的模型主要保存在一个应用程序中,实际上这些模型中的大多数应该在它们自己的单独应用程序中,我确实尝试解决这个问题并将它们向南移动,但是由于外键等,我发现它很棘手而且非常困难。

然而,由于 Django 1.7 并内置了对迁移的支持,现在有更好的方法吗?

0 投票
9 回答
34834 浏览

django - Django 1.8 - migrate 和 makemigrations 有什么区别?

根据此处的文档: https ://docs.djangoproject.com/en/1.8/topics/migrations/它说:

据我了解,我先做

创建迁移文件,然后执行

实际应用迁移?

请注意,我刚刚开始了我的 Django 项目,并且我将我的应用程序添加到了我的“installed_apps”列表中。在那之后,我做了

它说

它没有提到任何关于运行 makemigrations 的内容。

0 投票
10 回答
8380 浏览

python - 在具有所需 ForeignKey 引用的 Django (1.8) 应用程序之间移动模型

这是对这个问题的扩展:如何在两个 Django 应用程序之间移动模型(Django 1.7)

我需要将一堆模型old_appnew_app. 最好的答案似乎是Ozan's,但需要外键引用,事情就有点棘手了。new_app@halfnibbleold_appold_app.migrations对Ozan 的回答的评论中提出了一个解决方案,但我仍然无法确定步骤的精确顺序(例如,我什么时候将模型复制到.new_app.migrations等)

任何帮助深表感谢!

0 投票
1 回答
454 浏览

python - 使用 Django 迁移添加 Postgres 全文搜索字段

我已遵循本教程并将 PostgreSQL FTS 功能添加到我的 Django(我使用的是 1.8.1)项目的一个表中。

基本上,我的应用程序表中有一个额外的fts_document字段。my_tablemy_app

我想使数据库保持最新,而不必在每台机器上的 PostgreSQL shell 中手动复制和粘贴命令。与教程不同,我没有实现 South 部分,因为我让 South 与当前实现发生冲突,并且还发现 Django 没有本地方式来进行这些迁移。

我找不到任何示例代码,所以我被卡住了,需要帮助。我没有发布示例代码,因为我遵循了教程中的确切结构和步骤。

0 投票
0 回答
689 浏览

java - java中的Cassandra模式迁移

我在 .NET 和 Entity Framework 上写了很长一段时间,并且习惯了 Entity Framework Code First Migrations。这个想法是您在代码中描述您的表并创建迁移。在 tern 中检查当前数据库模式,将其与当前代码进行比较,如果有更改,它会创建/更改/删除表。之后执行迁移脚本并更新数据库模式。

目前我正在开发一个与 Cassandra 数据库一起使用的 Java 应用程序。因为会有很多表(复制数据以创建数据视图),所以我想使用与实体框架迁移相同的方法。如果我可以有问题地更改 Cassandra Keyspace 模式,那对我来说会容易得多,这样我就不必编写大量 CQL 代码来将单个属性添加到大量表中。

可以用 Cassandra 做到这一点吗?有什么工具可以做到这一点吗?

到目前为止,我已经找到了Pillar迁移,但我认为它不会完成这项工作。