Arj*_*yak 8 enums knex.js postgresql-9.5
我正在使用knex js和postgresql数据库.我使用迁移文件来创建表knex migrate:make create_car_table.在这里我添加了一列fuel_type.table.enu('fuel_type', ['PETROL', 'DIESEL', 'CNG']).
现在我需要改变表格,我需要这些枚举值['HYBRID', 'ELECTRIC', 'PETROL', 'DIESEL'].
我使用knex migrate:make alter_car_table并添加了以下代码创建了另一个迁移文件
exports.up = function(knex, Promise) {
return knex.schema.alterTable('car', function (table) {
table.enu('fuel_type', ['HYBRID', 'ELECTRIC', 'PETROL', 'DIESEL']).alter();
});
};
exports.down = function(knex, Promise) {
return knex.schema.alterTable('car', function (table) {
table.enu('fuel_type', ['PETROL', 'DIESEL', 'CNG']).alter();
});
};
Run Code Online (Sandbox Code Playgroud)
当我跑步时,knex migrate:latest我得到以下错误.
Knex:warning - migrations failed with error: alter table "car" alter column "fuel_type" type text check ("fuel_type" in ('HYBRID', 'ELECTRIC', 'PETROL', 'DIESEL')) using ("fuel_type"::text check ("fuel_type" in ('HYBRID', 'ELECTRIC', 'PETROL', 'DIESEL'))) - syntax error at or near "check"
Run Code Online (Sandbox Code Playgroud)
我已经提到了Knex Js.
更改列不适用于枚举类型knex 0.13.0.
枚举也被实现为检查约束,因此要更改它,您需要重新创建.
像这样的东西:
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) { ... };
Run Code Online (Sandbox Code Playgroud)
您可能需要检查最初由数据库中的knex生成的约束名称.
目前knex.schema.raw是修改枚举的唯一方法.
| 归档时间: |
|
| 查看次数: |
3428 次 |
| 最近记录: |