gpt4 book ai didi

enums - 在 Postgresql 的 Knex js 中更改表修改枚举给出错误

转载 作者:行者123 更新时间:2023-12-02 12:11:46 24 4
gpt4 key购买 nike

我正在使用 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();
});
};

当我运行 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"

我已经提到了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) { ... };

您可能需要检查最初由 knex 从数据库生成的约束名称。

目前knex.schema.raw是修改枚举的唯一方法。

关于enums - 在 Postgresql 的 Knex js 中更改表修改枚举给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45299464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com