在生产中向辅助关联表添加复合主键

2024-04-23 16:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表,其中包含安装错误:

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添加到ColumnsPrimaryKeyConstraint('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脚本。你知道吗

添加必要的复合主键而不中断或破坏生产中的现有数据的最佳做法是什么?你知道吗


Tags: 代码idtruedbsatablecolumninteger
1条回答
网友
1楼 · 发布于 2024-04-23 16:03:56

我不知道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;

相关问题 更多 >