Добавить составной первичный ключ во вторичную ассоциативную таблицу в производстве - PullRequest
0 голосов
/ 17 мая 2019

У меня есть таблица с ошибкой при настройке:

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 для переноса моей базы данных.

Как лучше всего добавить необходимый составной первичный ключ без прерывания или уничтожения существующих данных при производстве?

1 Ответ

2 голосов
/ 17 мая 2019

Я не знаю 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...