如何在不丢失数据的情况下在 DEV 和 PROD 之间设置 Hasura 迁移
How to setup Hasura migrations between DEV and PROD without loosing data
我正在使用 hasura 迁移指南来同步两个服务器 - DEV 和 PROD。
在我们手动传输更改之前(如 'using UI to copy all the changes'),所以现在数据库相似度为 90%。
我们决定设置适当的迁移,但根据我的测试,进行初始同步需要 'clean slate'。
问题示例:
我们在 DEV 和 PROD 上都有用户 table。在 DEV 上有附加字段 age
。
我们做
1 hasura migrate create --init
(在开发中)
2 hasura migrate apply --endpoint PRODUCTION
我们收到错误 relation \"users\" already exists
。
问题是 - 我们如何在不先清理 PROD 的情况下同步数据库?
您目前收到该问题是因为 运行 migrate apply
正在尝试在已经存在的表上执行。
如果您使用 --skip-execution
标志,您可以在 PRODUCTION
环境中将所有相关迁移标记为已完成,并且 migrate apply
照常应用新迁移。
CLI 文档中提供了更多信息:
https://hasura.io/docs/latest/graphql/core/hasura-cli/hasura_migrate_apply.html
在 re-reading 之后要澄清的问题 - 使用 create --init
创建初始迁移将创建您现在的数据库快照(STAGING
和 PRODUCTION
).
要在 STAGING
和 PRODUCTION
之间迁移,您需要手动更改创建的初始迁移以匹配暂存和生产,然后手动创建增量迁移以带来 PRODUCTION
符合STAGING
.
在此之后,如果您通过 CLI 使用 Hasura 控制台(使用 https://hasura.io/docs/latest/graphql/core/hasura-cli/hasura_console.html)——它将自动在目录中为您创建未来的增量迁移。
顺便说一句 - 您也可以使用 IF NOT EXISTS
手动创建弹性迁移(这些不会由 Hasura 自动创建,但您可以编辑它们的 SQL 文件迁移)。
例如:
ALTER TABLE users
ADD COLUMN IF NOT EXISTS age INT
编辑 2:我发现的另一个可能有用的工具是 Migra(用于 Postgres,在 Hasura 之外)。它可以帮助 diff-ing 您的开发和生产数据库,以帮助创建初始迁移状态:https://github.com/djrobstep/migra
有点隐蔽,但是关于迁移的部分涵盖了这种情况(您还没有 tracking/creating 迁移,现在需要第一次初始化它们):
希望对您有所帮助 =)
我正在使用 hasura 迁移指南来同步两个服务器 - DEV 和 PROD。 在我们手动传输更改之前(如 'using UI to copy all the changes'),所以现在数据库相似度为 90%。
我们决定设置适当的迁移,但根据我的测试,进行初始同步需要 'clean slate'。
问题示例:
我们在 DEV 和 PROD 上都有用户 table。在 DEV 上有附加字段 age
。
我们做
1 hasura migrate create --init
(在开发中)
2 hasura migrate apply --endpoint PRODUCTION
我们收到错误 relation \"users\" already exists
。
问题是 - 我们如何在不先清理 PROD 的情况下同步数据库?
您目前收到该问题是因为 运行 migrate apply
正在尝试在已经存在的表上执行。
如果您使用 --skip-execution
标志,您可以在 PRODUCTION
环境中将所有相关迁移标记为已完成,并且 migrate apply
照常应用新迁移。
CLI 文档中提供了更多信息:
https://hasura.io/docs/latest/graphql/core/hasura-cli/hasura_migrate_apply.html
在 re-reading 之后要澄清的问题 - 使用 create --init
创建初始迁移将创建您现在的数据库快照(STAGING
和 PRODUCTION
).
要在 STAGING
和 PRODUCTION
之间迁移,您需要手动更改创建的初始迁移以匹配暂存和生产,然后手动创建增量迁移以带来 PRODUCTION
符合STAGING
.
在此之后,如果您通过 CLI 使用 Hasura 控制台(使用 https://hasura.io/docs/latest/graphql/core/hasura-cli/hasura_console.html)——它将自动在目录中为您创建未来的增量迁移。
顺便说一句 - 您也可以使用 IF NOT EXISTS
手动创建弹性迁移(这些不会由 Hasura 自动创建,但您可以编辑它们的 SQL 文件迁移)。
例如:
ALTER TABLE users
ADD COLUMN IF NOT EXISTS age INT
编辑 2:我发现的另一个可能有用的工具是 Migra(用于 Postgres,在 Hasura 之外)。它可以帮助 diff-ing 您的开发和生产数据库,以帮助创建初始迁移状态:https://github.com/djrobstep/migra
有点隐蔽,但是关于迁移的部分涵盖了这种情况(您还没有 tracking/creating 迁移,现在需要第一次初始化它们):
希望对您有所帮助 =)