在Heroku的PostgreSQL中修改Django模型字段名是否会导致数据库异常?
Django字段重命名迁移在Heroku PostgreSQL上的安全性疑问
我需要执行多项数据库迁移操作,其中包含一处Django模型字段名称的修改。本地环境中Django能识别字段变更并生成了重名字段的迁移文件,但担心PostgreSQL与Heroku的表现差异会导致数据丢失,特此询问Heroku是否能顺利处理此类字段名变更,或是应当避免该操作?
本地迁移代码
class Migration(migrations.Migration): dependencies = [ ('main', '0085_modelname_timeframe'), ] operations = [ migrations.RenameField( model_name='modelename', old_name='timestamp', new_name='created_at', ), ]
Model代码
class ModelName(models.Model): user = models.ForeignKey(UserProfile, blank=True, null=True, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)
解答
这种字段重命名迁移在Heroku的PostgreSQL环境下是完全安全的,不会造成数据丢失。
Django的migrations.RenameField操作会被翻译成PostgreSQL的ALTER TABLE ... RENAME COLUMN语句,这是一个原子性操作——只会修改数据库列的名称,不会对列内的数据做任何修改或删除。
注意事项
- 执行迁移前务必备份Heroku数据库,可通过命令:
heroku pg:backups:capture生成备份 - 检查迁移文件中的
model_name拼写:你当前的迁移代码里写的是modelename,但Model类名是ModelName,这会导致迁移失败,需要修正为一致的名称 - 部署流程要正确:先将代码推送到Heroku,再执行
heroku run python manage.py migrate,不要颠倒顺序
内容的提问来源于stack exchange,提问作者PhilM
相关产品推荐
相关产品推荐

