UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

41 lines (35 loc) 1.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.spawnCopyDb = void 0; const child_process_promise_1 = require("child-process-promise"); const spawnCopyDb = async (opts) => { const script = createCopyDbScript(opts); return await (0, child_process_promise_1.spawn)(script, [], { shell: "bash", stdio: "inherit", }); }; exports.spawnCopyDb = spawnCopyDb; const createCopyDbScript = ({ targetPassword, targetPort, targetUsername, sourceUsername, sourcePassword, sourcePort, sourceDbName, targetDbName, }) => { const targetPSQL = (command) => `PGPASSWORD=${targetPassword} psql -p ${targetPort} --host=localhost --user=${targetUsername} -q ${command}`; // URL-encode credentials to handle special characters like @, :, /, etc. const encodedSourceUsername = encodeURIComponent(sourceUsername); const encodedSourcePassword = encodeURIComponent(sourcePassword); const copyDBScript = ` set -e dumptmp=$(mktemp /tmp/dump.XXXXXX) echo "Dumping file to $dumptmp" pg_dump --dbname=postgres://${encodedSourceUsername}:${encodedSourcePassword}@localhost:${sourcePort}/${sourceDbName} --no-owner --no-privileges > $dumptmp echo "dump done" ${targetPSQL(`-c 'drop database "${targetDbName}" WITH (FORCE)' 1> /dev/null || true`)} ${targetPSQL(`-c 'create database "${targetDbName}"' 1> /dev/null`)} echo "Restoring dump..." ${targetPSQL(`"${targetDbName}" < $dumptmp 1> /dev/null`)} echo "Clean up..." set +e rm $dumptmp echo "\n🐱 Done!" `; return copyDBScript; }; //# sourceMappingURL=copyDb.js.map