Alter table modify enum in Knex js for Postgresql gives error

前端 未结 2 609
抹茶落季
抹茶落季 2021-02-14 16:14

I am using knex js and postgresql database. I have used a migration file to create a table knex migrate:make create_car_table. In this I have added a column fuel_ty

2条回答
  •  野性不改
    2021-02-14 16:32

    Alter column does not work for enum types in knex 0.13.0.

    Also enums are implemented as check constraints, so to change it you need to recreate the.

    Something like this:

    exports.up = function(knex, Promise) {
      return knex.schema.raw(`
        ALTER TABLE "car"
        DROP CONSTRAINT "car_fuel_type_check",
        ADD CONSTRAINT "car_fuel_type_check" 
        CHECK (fuel_type IN ('HYBRID', 'ELECTRIC', 'PETROL', 'DIESEL'))
      `);
    };
    
    exports.down = function(knex, Promise) { ... };
    

    You might need to check your constraint name that was originally generated by knex from the DB.

    Currently knex.schema.raw is the only way to modify enums.

提交回复
热议问题