Javascript 在knex迁移中更新枚举列类型
我希望编写一个迁移字符串,向枚举列类型添加一个新字符串。我正在尝试将Javascript 在knex迁移中更新枚举列类型,javascript,enums,migration,knex.js,Javascript,Enums,Migration,Knex.js,我希望编写一个迁移字符串,向枚举列类型添加一个新字符串。我正在尝试将gamma添加到service列中 我尝试了下面的代码。这会发生冲突,因为表和列已经存在 const table = 'user_associations' export function up (knex, Promise) { return knex.schema.table(table, function (table) { table.enu('service', ['alpha', 'beta', 'ga
gamma
添加到service
列中
我尝试了下面的代码。这会发生冲突,因为表和列已经存在
const table = 'user_associations'
export function up (knex, Promise) {
return knex.schema.table(table, function (table) {
table.enu('service', ['alpha', 'beta', 'gamma']).notNullable()
})
}
export function down (knex, Promise) {
return knex.schema.table(table, function (table) {
table.enu('service', ['alpha', 'beta']).notNullable()
})
}
- notNull列是否需要默认值
- 最好不要使用枚举,因为它不是被动的…我将在代码中使用小整数字段和常量来控制可选字段
$psql
>\c…
\dt
查看所有表格\d用户\u关联
以查看该表的所有信息user\u associations\u service\u check
exports.up = knex =>
knex.raw(`
ALTER TABLE ONLY user_associations
DROP CONSTRAINT user_associations_service_check;
ALTER TABLE ONLY user_associations
ADD CONSTRAINT user_associations_service_check
CHECK ("service" = ANY (ARRAY['alpha'::text, 'beta'::text, 'gamma'::text]));
`)
exports.down = knex =>
knex.raw(`
ALTER TABLE ONLY user_associations
DROP CONSTRAINT user_associations_service_check;
ALTER TABLE ONLY user_associations
ADD CONSTRAINT user_associations_service_check
CHECK ("service" = ANY (ARRAY['alpha'::text, 'beta'::text));
`)
上面链接的关于您的knexjs问题的评论有一个聪明的实用功能来实现这一点:。尝试在一次迁移中首先删除列,然后在第二次迁移中创建它。如果其他所有操作都失败,请使用纯sql尝试knex.raw
exports.up = knex =>
knex.raw(`
ALTER TABLE ONLY user_associations
DROP CONSTRAINT user_associations_service_check;
ALTER TABLE ONLY user_associations
ADD CONSTRAINT user_associations_service_check
CHECK ("service" = ANY (ARRAY['alpha'::text, 'beta'::text, 'gamma'::text]));
`)
exports.down = knex =>
knex.raw(`
ALTER TABLE ONLY user_associations
DROP CONSTRAINT user_associations_service_check;
ALTER TABLE ONLY user_associations
ADD CONSTRAINT user_associations_service_check
CHECK ("service" = ANY (ARRAY['alpha'::text, 'beta'::text));
`)