问题标签 [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.
apache-spark - 复杂类型的模式演化
arrays
spark中structs
(复杂类型)的模式演变状态如何?
我知道对于常规简单类型的 ORC 或 Parquet 来说工作得很好(添加一个新列),但是到目前为止我找不到任何我想要的案例的文档。
我的用例是有一个类似于这个的结构:
我希望能够向数组中的结构添加新字段。
Map
(键值)复杂类型会导致效率低下吗?在那里,我至少可以确定添加新字段(标签)会很灵活。
编辑
缺少其他列!为什么?
此行为针对 spark 2.2.3_2.11 和 2.4.2_2.12 进行了评估。
google-cloud-firestore - 架构更改的 Firestore 完整集合更新
我正在尝试找出一种可靠的策略来处理 Firestore 中的架构更改。我的想法是,架构更改通常需要读取然后写入集合中的每个文档(或者可能是不同集合中的文档)。
以下是我的担忧:
- 不知道以后的收藏有多大。在单个查询中可以读取多少个文档时,我会遇到任何限制吗?
- 我目前的计划是从 Cloud Build 运行架构更改脚本。这可能会超时吗?
- 进行实际更新的最有效方法是什么?(例如读取文档,将更新写入文档,重复...)
- 我应该使用批量写入吗?
另外,如果您认为这是实现架构更改的完全错误方法,请随时告诉我,并提出更好的解决方案。
ruby-on-rails - 当我在数据迁移之前运行模式迁移时,使用 ActiveRecord,数据库中的数据没有正确更新
截至目前,我有一个包含列的用户表
id, name, email, status
status
field 是一个整数类型,其值 1 和 2 分别代表一个活跃用户和非活跃用户。
我想将status
字段更改为字符串类型并迁移数据 - 将 1 转换为“活动”,将 2 转换为“非活动”
我生成了2个迁移文件rails g migration
user.rb
db/migrate/20190906115523_update_user_status_type.rb
db/migrate/20190906115828_update_user_statuses.rb
运行后rails db:migrate
Expected:
迁移完成后,每个用户的状态都应转换为“活动”或“非活动”。
Actual Results:
每个用户的状态都转换为"0"
字符串类型。
postgresql - 如何实现 PostgreSQL 数据库的架构迁移
我需要为 PostgreSQL 实现模式迁移机制。只是为了消除歧义:对于模式迁移,我的意思是我需要将我的数据库结构升级到最新版本,而不管它们在特定服务器实例上的当前状态如何。
例如,在版本一中我创建了一些表,然后在版本二中我重命名了一些列,在版本三中我删除了一个表并创建了另一个。我有多个服务器,在其中一些服务器上我有版本一,一些版本三等。
我的想法:
- 为产生的输出生成哈希
pg_dump --schema-only
每次在我更改数据库架构之前。这将是一种可靠的方式来识别将来应该应用补丁的数据库版本。
- 包含补丁列表以及它们应该应用的相关散列。
- 当我需要升级我的数据库时,我将运行一个应用程序来搜索与当前数据库结构相对应的哈希(通过计算本地数据库的哈希并将其与我拥有的哈希集进行比较)并应用相关的补丁。
- 重复直到找不到下一个哈希。
您能否指出这种方法的任何弱点?
database-migration - 异步运行 Flyway 迁移
按照设计,flyway 迁移在事务中运行,并且在应用程序启动期间很早就同步。这通常是需要的,以确保在业务逻辑开始执行之前数据库处于一致状态(已迁移)或迁移失败并且应用程序崩溃。
在某些情况下,我真的希望能够启动应用程序而无需等待某些迁移完成(长时间运行的迁移、创建索引或物化视图等)。从 CI 服务器部署并使用部署超时/健康检查(不能无限期地提高)以确保部署按预期工作时,也可能需要这样做。
是否有任何配置/约定/最佳实践来启用异步迁移?
(即命名迁移A2_00__UpdateSthLong.sql
而不是 V2(标准)或 R2(可重复迁移)。
postgresql - 部署不同分支时管理 Sqitch 迁移
当我们使用 Sqitch 部署到我们的测试环境时,迁移运行并且一切正常。但是,当我们必须测试不同的代码分支时,Sqitch 迁移不会回滚。我正在寻找的是其他人如何解决这个问题的想法。例如,如果我有一个创建 table 的迁移my_table
,然后从不同的分支部署迁移,Sqitch 会感到困惑而无法继续前进。
分支更改的原因:我们有使用develop
分支的功能,并且正在应用修补程序master
(我知道;我们将更改它)。交换来测试一个修补程序导致了所有这些混乱。
我们考虑让 Jenkins 作业来运行 asqitch revert
并让用户提供要回滚的迁移,但我们希望消除手动步骤。
必须切换代码分支时如何管理迁移?
google-cloud-platform - 如何通过 Terraform 管理 BigQuery 表的架构更改
我们目前使用以下机制创建具有预定义架构的 BigQuery 表,并创建了基础架构。
https://www.terraform.io/docs/providers/google/r/bigquery_table.html
开发团队决定通过添加另一列来修改架构,因此我们计划修改上述 terraform 脚本中的架构更改以启用此功能。
在生产环境中管理此类模式迁移的最佳方法是什么?
由于在生产环境中,我们希望在执行模式迁移时保留表数据
mongodb - 运行数据库架构迁移的最佳实践
构建服务器通常与运行实例的 VPC 分离。无论是 GCP 上的 Cloud Build,还是利用众多 CI 工具之一(CircleCI、Codeship 等),因此运行数据库模式更新特别具有挑战性。
所以,这让我想知道......什么时候运行数据库模式迁移的最佳位置?
从我的角度来看,有四种机会可以在 CD 管道中自动运行模式迁移或种子:
- 在构建阶段
- 在实例启动时
- 通过预热脚本(同步或异步)
- 通过端点,自动或手动调用部署后
选项 1 的主要问题是安全性。使用 Google Cloud Sql/Google Cloud Build,我可以通过构建步骤和 SQL 代理运行(非常困难)、模式迁移/种子。老实说,设置起来真是让人头疼……但它确实有效。
我的最新项目是使用 MongoDb,如果我需要移动一些数据/播种一些数据,我已经在 migrate-mongo 中连接了它。不幸的是,没有这样的 SQL 代理可以安全地将 MongoDb(atlas)连接到 Cloud Build(或任何其他 CI 工具),因为它不在实例的 VPC 中运行。因此,在我看来,这是一条死胡同。
因此,我对热身脚本概念进行了加热(不是双关语)。
使用 App Engine,在提供流量之前调用预热脚本,并在已经通过 VPC 访问的主机上调用。预热脚本旨在用于打开数据库连接以加快连接速度,但假设没有未完成的迁移,它会这样做 - 一个非常轻量级的 select 语句。
谁能想到这种方法有什么问题?
选项 4 也很合适(本质上是一样的)。不过,这些端点可能需要更多保护 - 特别是如果存在“向下”迁移脚本(!)
mysql - 幽灵/复制表比原始表大很多倍
信息:我正在使用 AWS RDS Mysql 5.6.34 (500GB) 实例(没有副本,只有主)
注意: Binlog 已启用并设置为 Row
目标:将列field_1
从枚举修改为tinyint
额外信息:我正在使用 Rails 应用程序。所以每次我想为枚举添加一个值时,我都需要编写一个迁移。因此,将枚举字段转换为 tinyint,这样我就可以添加或删除枚举值,而无需使用Active Enum编写迁移
其他信息:我也尝试过LHM,但 RDS 实例内存不足 93%
运行 gh-ost 之前的数据库信息:
gh-ost前原表的大小:(从列表中只显示需要修改的表)
开始迁移:
当迁移完成近 93% 时,RDS 可用内存降至 20GB。所以我停止了 gh-ost。
停止 gh-ost 后的数据库信息:
停止 gh-ost 后原始表的大小:
问题:
为什么gh-ost表比原表大很多倍?
如果需要有关表、索引或数据库的更多信息,我可以提供:)
这是在 gh-ost 存储库中创建的问题的链接:https ://github.com/github/gh-ost/issues/890
java - 从 Docker 容器运行 MyBatis 迁移的最正确方法
我试图弄清楚如何以及何时从部署在 Docker Swarm 中的 Docker 容器运行 mybatis 模式迁移。我的意思是:我需要最正确的方法来做到这一点。
目前我们从 Dockerfile 构建一个 Docker 容器
然后 start.sh 脚本包含
但是通过这种方式,我们必须从 Ubuntu 构建一个映像,安装 Maven 并将环境“硬编码”到 start.sh 文件中的迁移午餐,所以我们需要来自不同环境的不同文件。
您认为在构建/部署过程中运行这些方案迁移的最正确方法是什么?
提前致谢。
编辑:我发现使用在 DockerHub 上找到并由@h3adache 发布的 mybatis 迁移 docker 映像的解决方案很有用,但仍然有一个问题试图在 DockerSwarm 上执行它:该问题与安装在主机文件夹之间的卷有关带有 mybatis 迁移文件和容器文件夹“/migration”
我的 docker-compose.yml 是
它在本地对 dockerized MySQL 运行良好,但在使用 GitLab 管道部署期间失败。
显然,当我签出代码时,该./mybatis-migrations
文件夹位于我的本地主机上,并且当 GitLab 运行程序构建所有内容但不在 DockerSwarm 主机上时,它位于 GitLab 存储库的构建路径中,因此无法找到该目录。
这是错误消息:
“绑定”类型的挂载配置无效:绑定源路径不存在
我怎样才能解决这个问题?