Skip to content

Instantly share code, notes, and snippets.

@LuckyArdhika
Created August 10, 2023 08:39
Show Gist options
  • Save LuckyArdhika/d2db7ceab46ecb0e357aa6643256dcc6 to your computer and use it in GitHub Desktop.
Save LuckyArdhika/d2db7ceab46ecb0e357aa6643256dcc6 to your computer and use it in GitHub Desktop.
Postgresql backup scheduling by backup server side
onst cron = require('node-cron');
const { exec } = require('child_process');
const pgConfig = [
{
app: 'name_app',
username: '',
password: '',
host: '',
port: '',
database: '',
password_backup: 'password_in_backup_server'
}
];
function backupPostgres(){
console.log(`Running backup at ${new Date().toLocaleString('in-ID', {timeZone: 'Asia/Jakarta'})} WIB`);
const backupFileName = `backup/backup_${new Date().toISOString()}.sql`;
const backupCommand = `PGPASSWORD=${pgConfig[0].password} pg_dump -U ${pgConfig[0].username} -h ${pgConfig[0].host} -p ${pgConfig[0].port} -d ${pgConfig[0].database} > ${backupFileName}`;
exec(backupCommand, (error, stdout, stderr) => {
if (error) {
console.error(`Backup failed at ${new Date().toLocaleString('in-ID', {timeZone: 'Asia/Jakarta'})} WIB: ${error.message}: `, error);
} else {
console.log(`[OK] Backup successful. File saved as ${backupFileName}`);
exec(`PGPASSWORD=${pgConfig[0].password_backup} psql -U postgres -h localhost -c "DROP DATABASE ${pgConfig[0].database};" -c "CREATE DATABASE ${pgConfig[0].database};"`, (error, stdout, stderr) => { if (error) {
console.error(`DROP and CREATE database failed at ${new Date().toLocaleString('in-ID', {timeZone: 'Asia/Jakarta'})} WIB: ${error.message}: `, error);
} else {
console.log(`[OK] Success DROP and CREATE database ${pgConfig[0].database}`);
exec(`PGPASSWORD=${pgConfig[0].password_backup} psql -U postgres -h localhost -d ${pgConfig[0].database} -f ${backupFileName}`, (error, stdout, stderr) => {
if (error) {
console.error(`Restore database failed at ${new Date().toLocaleString('in-ID', {timeZone: 'Asia/Jakarta'})} WIB: ${error.message}: `, error);
} else {
console.log(`[OK] Success import to database ${pgConfig[0].database}`);
}
});
}
});
}
});
}
cron.schedule('0 17 * * *', backupPostgres);
console.log(`[+] Script started - ${new Date().toLocaleString('in-ID', {timeZone: 'Asia/Jakarta'})} WIB`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment