我有一个表,其中包含设置错误:
ass_table = Table('ass', db.Model.metadata,
Column('id1', db.Integer, db.ForeignKey('class1.id')),
Column('id2', db.Integer, db.ForeignKey('class2.id')),
)
我真的应该在primary_key=True
或Columns
上都添加PrimaryKeyConstraint('id1', 'id2', name='silly_me')
。
它最初创建的Alembic自动生成代码为:
op.create_table('ass',
sa.Column('id1', sa.Integer(), nullable=True),
sa.Column('id2', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['id2'], ['class2.id'], ),
sa.ForeignKeyConstraint(['id1'], ['class1.id'], )
)
我确认我的Postgres数据库没有在ass
表上建立主键。
现在添加代码不会自动生成一个Alembic脚本来迁移我的数据库。
添加必需的组合主键 而不中断或破坏生产中的现有数据 的最佳方法是什么?
答案 0 :(得分:2)
我不知道alembic,但是要在纯postgres中做到这一点,我会做以下事情:
CREATE UNIQUE INDEX CONCURRENTLY silly_me_idx ON ass(id1, id2);
ALTER TABLE ass ADD CONSTRAINT silly_me_pkey PRIMARY KEY USING INDEX silly_me_idx;