@catladder/cli
Version:
Panter cli tool for cloud CI/CD and DevOps
41 lines (35 loc) • 1.67 kB
JavaScript
;
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