Add script to migrate database from MongoDB to PostgreSQL
This commit is contained in:
parent
2a67b76169
commit
a097312620
1 changed files with 76 additions and 0 deletions
76
convertdb.js
Normal file
76
convertdb.js
Normal file
|
@ -0,0 +1,76 @@
|
|||
require("dotenv").config();
|
||||
const { promisify } = require("util");
|
||||
const { writeFile } = require("fs");
|
||||
const { Pool } = require("pg");
|
||||
const pool = new Pool({
|
||||
user: "esmbot",
|
||||
host: "localhost",
|
||||
database: "esmbot",
|
||||
port: 5432
|
||||
});
|
||||
const mongoose = require("mongoose");
|
||||
mongoose.connect(process.env.MONGO, { poolSize: 10, bufferMaxEntries: 0, reconnectTries: 5000, useNewUrlParser: true, useUnifiedTopology: true });
|
||||
const guildSchema = new mongoose.Schema({
|
||||
id: String,
|
||||
tags: Map,
|
||||
prefix: String,
|
||||
warns: Map,
|
||||
disabledChannels: [String]
|
||||
});
|
||||
const Guild = mongoose.model("Guild", guildSchema);
|
||||
|
||||
const tweetSchema = new mongoose.Schema({
|
||||
tweets: [String],
|
||||
replies: [String],
|
||||
media: [String],
|
||||
phrases: [String],
|
||||
games: [String],
|
||||
characters: [String],
|
||||
download: [String],
|
||||
enabled: Boolean
|
||||
});
|
||||
const TweetCollection = mongoose.model("TweetCollection", tweetSchema);
|
||||
|
||||
const globalSchema = new mongoose.Schema({
|
||||
cmdCounts: Map
|
||||
});
|
||||
const Global = mongoose.model("Global", globalSchema);
|
||||
|
||||
(async () => {
|
||||
console.log("Migrating guilds...");
|
||||
const guilds = await Guild.find();
|
||||
try {
|
||||
await pool.query("CREATE TABLE guilds ( guild_id VARCHAR(30) NOT NULL, tags json NOT NULL, prefix VARCHAR(15) NOT NULL, warns json NOT NULL, disabled text ARRAY NOT NULL )");
|
||||
} catch {
|
||||
console.log("Skipping table creation due to error...");
|
||||
}
|
||||
for (const guild of guilds) {
|
||||
if ((await pool.query("SELECT * FROM guilds WHERE guild_id = $1", [guild.id])).rows.length !== 0) {
|
||||
await pool.query("UPDATE guilds SET tags = $1, prefix = $2, warns = $3, disabled = $4 WHERE guild_id = $5", [guild.tags, guild.prefix, guild.warns, guild.disabledChannels, guild.id]);
|
||||
} else {
|
||||
await pool.query("INSERT INTO guilds (guild_id, tags, prefix, warns, disabled) VALUES ($1, $2, $3, $4, $5)", [guild.id, guild.tags, guild.prefix, guild.warns, guild.disabledChannels]);
|
||||
}
|
||||
console.log(`Migrated guild with ID ${guild.id}`);
|
||||
}
|
||||
console.log("Migrating Tweets...");
|
||||
const tweets = await TweetCollection.find();
|
||||
await promisify(writeFile)("../tweets.json", JSON.stringify(tweets, null, 2));
|
||||
console.log("Migrating command counts...");
|
||||
const global = await Global.findOne();
|
||||
try {
|
||||
await pool.query("CREATE TABLE counts ( command VARCHAR NOT NULL, count integer NOT NULL )");
|
||||
} catch {
|
||||
console.log("Skipping table creation due to error...");
|
||||
}
|
||||
console.log(global);
|
||||
for (const [key, value] of global.cmdCounts) {
|
||||
if ((await pool.query("SELECT * FROM counts WHERE command = $1", [key])).rows.length !== 0) {
|
||||
await pool.query("UPDATE counts SET count = $1 WHERE command = $2", [value, key]);
|
||||
} else {
|
||||
await pool.query("INSERT INTO counts (command, count) VALUES ($1, $2)", [key, value]);
|
||||
}
|
||||
console.log(`Migrated counts for command ${key}`);
|
||||
}
|
||||
console.log("Done!");
|
||||
return;
|
||||
})();
|
Loading…
Reference in a new issue