2024-10-14 04:33:09 +00:00
|
|
|
|
import fs from 'fs';
|
|
|
|
|
/**
|
|
|
|
|
* ## sqlite与postgres不同点
|
|
|
|
|
* 1.
|
|
|
|
|
* sqlite: AUTOINCREAMENT
|
|
|
|
|
* postgresql: GENERATED BY DEFAULT AS IDENTITY
|
|
|
|
|
*
|
|
|
|
|
* 2.
|
|
|
|
|
* sqlite: datetime
|
|
|
|
|
* postgresql: timestamp
|
|
|
|
|
*
|
|
|
|
|
* 3.
|
|
|
|
|
* sqlite: update sqlite_sequence set seq = 1000 where name = 'sys_role' ;
|
|
|
|
|
* postgresql: select setval('sys_role_id_seq', 1000);
|
|
|
|
|
*
|
|
|
|
|
* 4.
|
|
|
|
|
* sqlite: "disabled" boolean DEFAULT (0)
|
|
|
|
|
* postgresql: "disabled" boolean DEFAULT (false)
|
|
|
|
|
*
|
|
|
|
|
* 5.
|
|
|
|
|
* sqlite: last_insert_rowid()
|
|
|
|
|
* postgresql: LASTVAL()
|
|
|
|
|
*
|
|
|
|
|
* 6.
|
|
|
|
|
* sqlite: integer
|
|
|
|
|
* postgresql: bigint
|
|
|
|
|
*/
|
|
|
|
|
function transform() {
|
|
|
|
|
// 读取文件列表
|
|
|
|
|
const sqliteFiles = fs.readdirSync('./migration/');
|
|
|
|
|
const pgFiles = fs.readdirSync('./migration-pg');
|
|
|
|
|
//找出pg里面没有的文件
|
|
|
|
|
const notFiles = sqliteFiles.filter(file => !pgFiles.includes(file));
|
|
|
|
|
for (const notFile of notFiles) {
|
|
|
|
|
//开始转换
|
|
|
|
|
const sqliteSql = fs.readFileSync(`./migration/${notFile}`, 'utf-8');
|
|
|
|
|
let pgSql = sqliteSql.replace(/AUTOINCREMENT/g, 'GENERATED BY DEFAULT AS IDENTITY');
|
|
|
|
|
pgSql = pgSql.replace(/datetime/g, 'timestamp');
|
|
|
|
|
pgSql = pgSql.replace(/boolean DEFAULT \(0\)/g, 'boolean DEFAULT (false)');
|
2024-11-30 18:10:40 +00:00
|
|
|
|
pgSql = pgSql.replace(/boolean.*NOT NULL DEFAULT \(0\)/g, 'boolean NOT NULL DEFAULT (false)');
|
2024-10-14 04:33:09 +00:00
|
|
|
|
pgSql = pgSql.replace(/integer/g, 'bigint');
|
|
|
|
|
pgSql = pgSql.replace(/last_insert_rowid\(\)/g, 'LASTVAL()');
|
|
|
|
|
fs.writeFileSync(`./migration-pg/${notFile}`, pgSql);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (notFiles.length > 0) {
|
|
|
|
|
console.log('sqlite->pg 转换完成');
|
|
|
|
|
|
|
|
|
|
throw new Error('sqlite->pg 转换完成,有更新,需要测试pg');
|
|
|
|
|
} else {
|
|
|
|
|
console.log('sql无需更新');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
transform();
|