all repos — dbee @ b22378184073ce48c49767ed1031a99e1e83166c

Move PostgreSQL backups using S3

handlers/db/backup.js (view raw)

 1const chalk = require("chalk");
 2const S3Client = require("../../libs/s3/client");
 3const execPsqlCommand = require("../../libs/psql/shellCmd");
 4const getPsqlConfig = require("../../libs/psql/getConfig");
 5const getS3Config = require("../../libs/s3/getConfig");
 6const { splitPsqlParts } = require("./_utils");
 7
 8const DUMP_DIR = "/tmp/";
 9
10const bckp = async params => {
11  const { s3Name } = params;
12  const { psqlName, dbName } = splitPsqlParts(params["psqlName/dbName"]);
13  const psqlConfig = getPsqlConfig(psqlName);
14  const s3Config = getS3Config(s3Name);
15  const date = new Date().toISOString();
16  const fileName = `${dbName}.${psqlName}.${date}.bak`;
17  const dumpPath = `${DUMP_DIR}${fileName}`;
18
19  try {
20    console.log(
21      chalk.greenBright(
22        `Dumping ${dbName} database from ${psqlName} to ${dumpPath}`
23      )
24    );
25    await dumpDatabase(dumpPath, dbName, psqlConfig);
26    console.log(
27      chalk.greenBright(`Uploading ${fileName} to ${s3Config.name} S3 server`)
28    );
29    await pushToS3(s3Config, { dumpPath, fileName });
30    console.log(chalk.greenBright("Done."));
31  } catch (error) {
32    console.error(chalk.redBright(error));
33  }
34};
35
36const dumpDatabase = (dumpPath, dbName, psqlConfig) =>
37  execPsqlCommand(`pg_dump -Fc -f "${dumpPath}" ${dbName}`, psqlConfig);
38
39const pushToS3 = async (s3Config, { dumpPath, fileName }) =>
40  S3Client(s3Config).push({ dumpPath, fileName });
41
42module.exports = bckp;