Files
yunrui_asset/backend/scripts/migrate-consumable-version.js
T

98 lines
2.9 KiB
JavaScript
Raw Normal View History

/**
* 耗材管理乐观锁迁移脚本
* 为 consumables 表添加 version 字段
*/
const { sequelize, dbDialect } = require('../db');
async function migrate() {
try {
console.log('开始执行耗材乐观锁迁移...');
console.log('数据库类型:', dbDialect);
if (dbDialect === 'sqlite') {
// SQLite: 检查字段是否存在
const tableInfo = await sequelize.query(
"PRAGMA table_info(consumables)",
{ type: sequelize.QueryTypes.SELECT }
);
const hasVersion = tableInfo.some(col => col.name === 'version');
if (!hasVersion) {
console.log('添加 version 字段...');
await sequelize.query(
"ALTER TABLE consumables ADD COLUMN version INTEGER DEFAULT 0"
);
console.log('version 字段添加成功');
} else {
console.log('version 字段已存在,跳过');
}
// 检查 updatedAt 索引
const indexes = await sequelize.query(
"SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='consumables'",
{ type: sequelize.QueryTypes.SELECT }
);
const hasUpdatedAtIndex = indexes.some(idx => idx.name === 'consumables_updatedAt');
if (!hasUpdatedAtIndex) {
console.log('添加 updatedAt 索引...');
await sequelize.query(
"CREATE INDEX consumables_updatedAt ON consumables(updatedAt)"
);
console.log('updatedAt 索引添加成功');
} else {
console.log('updatedAt 索引已存在,跳过');
}
} else if (dbDialect === 'mysql') {
// MySQL: 检查并添加字段
try {
console.log('添加 version 字段...');
await sequelize.query(
"ALTER TABLE consumables ADD COLUMN version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号'"
);
console.log('version 字段添加成功');
} catch (err) {
if (err.message.includes('Duplicate column')) {
console.log('version 字段已存在,跳过');
} else {
throw err;
}
}
// 添加索引
try {
console.log('添加 updatedAt 索引...');
await sequelize.query(
"CREATE INDEX idx_consumables_updatedAt ON consumables(updatedAt)"
);
console.log('updatedAt 索引添加成功');
} catch (err) {
if (err.message.includes('Duplicate key')) {
console.log('updatedAt 索引已存在,跳过');
} else {
throw err;
}
}
}
// 初始化现有数据的 version 值
console.log('初始化现有数据的 version 值...');
await sequelize.query(
"UPDATE consumables SET version = 0 WHERE version IS NULL"
);
console.log('version 值初始化完成');
console.log('迁移完成!');
process.exit(0);
} catch (error) {
console.error('迁移失败:', error);
process.exit(1);
}
}
migrate();