web-dev-qa-db-ja.com

Knex移行でデフォルト値を設定するにはどうすればよいですか?

Knexの移行で主キーのデフォルト値を設定したいのですが、問題が発生しています。これは私の最初の移行です:

_exports.up = (knex, Promise) => {
  return knex.schema.createTable(
    'users',
    (table) => {
      table.uuid('id').primary();
      table.string('email');
    }
  );
};
_

idフィールドをランダムなUUIDにデフォルト設定したいと思います。これが私の次の移行です:

_exports.up = (knex, Promise) => {
  return Promise.all([
    knex.raw('create extension if not exists "uuid-ossp"'),
    knex.schema.alterTable('users', (table) => {
      table.uuid('id')
        .defaultTo(knex.raw('uuid_generate_v4()'))
        .alter();
    }),
  ]);
};
_

これを実行すると、次のエラーが発生します。

_migration failed with error: alter table "users" alter column "id" drop not null - column "id" is in a primary key
_

これに基づいて、Knexが_NOT NULL_制約を削除しようとしているように見えます。 .notNullable()の前に.defaultTo()をチェーニングしようとしましたが、それでも同じエラーが発生します。私が間違っていることはありますか?

6
Rob

主キーを削除し、列を変更してから、再作成する必要があります。

0
lolol