如何将Strapi数据库迁移至生产环境现有PostgreSQL数据库?
PostgreSQL本地结构变更迁移至生产环境的实用方案
1. 手动编写迁移SQL脚本(最稳妥可控)
- 提取本地变更对应的SQL语句:
- 新增表:直接复制建表语句,比如
CREATE TABLE new_user (id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL); - 修改表结构:比如添加字段
ALTER TABLE "order" ADD COLUMN status INT DEFAULT 0;,调整字段约束ALTER TABLE product ALTER COLUMN price SET NOT NULL;
- 新增表:直接复制建表语句,比如
- 将SQL按执行顺序整理成脚本文件(注意依赖关系,比如先建关联基础表,再修改关联字段)
- 操作生产库前必须先备份:
pg_dump -U prod_user -d prod_db > prod_backup_$(date +%Y%m%d).sql - 执行迁移脚本:
psql -U prod_user -d prod_db -f your_migration_script.sql
2. 用pg_dump+diff工具生成差异脚本
- 导出本地库仅结构:
pg_dump -U local_user -d local_db -s > local_schema.sql - 导出生产库仅结构:
pg_dump -U prod_user -d prod_db -s > prod_schema.sql - 用diff工具对比两个文件:
diff local_schema.sql prod_schema.sql > schema_diff.txt - 从diff结果中筛选有效变更SQL(排除注释、无关默认值差异等),整理成迁移脚本后执行,同样需先备份生产库
3. 使用版本化迁移工具(适合长期迭代项目)
- Flyway:把每个变更写成带版本号的SQL文件(比如
V1__create_product_table.sql、V2__add_category_column.sql),工具自动记录已执行版本,仅运行未执行脚本,支持回滚 - Liquibase:可用XML、YAML或SQL定义变更,自动对比本地与生产库结构差异生成迁移脚本,还能管理变更历史
- 这类工具适合团队协作,避免手动脚本顺序错误,方便后续追溯变更记录
必做的前置和校验步骤
- 备份优先:任何变更前都要备份生产库,这是操作底线
- 测试先行:先在与生产环境完全一致的测试环境执行迁移脚本,验证语法、数据兼容性
- 低峰执行:选择业务流量最小的时间段操作,减少对用户的影响
- 事后校验:迁移完成后,检查新增表是否存在、字段修改是否生效,必要时抽查数据确保完整性
内容的提问来源于stack exchange,提问作者AkhilaV
相关产品推荐
相关产品推荐

