Я использую Knex с Postgres для моего сервера узлов. У меня есть таблица со следующим столбцом:
table.uuid('id').defaultTo((knex.raw('uuid_generate_v4()'))).unique();
Мне нужно изменить его, чтобы сделать его первичным ключом. Вот как выглядит мой файл миграции:
export async function up(knex: Knex): Promise<any> {
return knex.schema.alterTable('orders', (table) => {
table.dropUnique(["id"]);
table.uuid('id').defaultTo((knex.raw('uuid_generate_v4()'))).unique().primary().alter();
});
}
export async function down(knex: Knex): Promise<any> {
return knex.schema.alterTable('orders', (table) => {
table.uuid('id').defaultTo((knex.raw('uuid_generate_v4()'))).unique().alter();
});
}
Прямая миграция работает нормально, но обратная миграция приводит к этой ошибке:
migration failed with error: alter table "orders" alter column "id" drop not null - column "id" is in a primary key
error: column "id" is in a primary key
Какой правильный способ сделать это?