@ps-aux/nodebup 0.9.10 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -76,21 +76,13 @@ let PgBackupController = (_dec = (0, _inversify.injectable)(), _dec2 = Reflect.m
76
76
  await this.fs.inTmpDir('pg-backup', async dir => {
77
77
  const outputDir = _Path.AbsPath.from(dir);
78
78
 
79
- this.log.info('Dumping database to a file');
79
+ this.log.info('Processing Postgres backup');
80
80
  const bashCmds = [`echo "*:*:*:*:${pass}" > ~/.pgpass`, `chmod 400 ~/.pgpass`, `pg_dumpall -d ${pgUrl}`]; // Don't forget that this itself might be run in docker
81
81
  // therefore volume mounts are not usable (will apply to the location at host)
82
82
 
83
- const dumpOut = outputDir.resolve(this.outFileName);
84
- const f = this.fs.writeStream(dumpOut);
85
- await this.sh.asyncExec(`docker run --rm --network host ` + `postgres:${version} ` + `bash -c '${bashCmds.join(' && ')}'`, // f.write
86
- data => {
87
- f.write(data);
88
- });
89
- f.end();
90
- this.log.info('Compressing');
91
- const zipOutputName = `pg-backup-${this.now()}.zip`;
92
- await this.zip.zipDir(outputDir, outputDir.resolve(zipOutputName));
93
- this.fs.rmFile(dumpOut);
83
+ const zipOutPath = outputDir.resolve(`pg-backup-${this.now()}.sql.gz`);
84
+ this.log.info(`Dumping database to ${zipOutPath.str()}`);
85
+ await this.sh.exec(`docker run --rm --network host ` + `postgres:${version} ` + `bash -c '${bashCmds.join(' && ')}' | gzip> ${zipOutPath.str()}`);
94
86
  this.log.info('Uploading');
95
87
  storage.store(_Path.AbsPath.from(dir));
96
88
  });
@@ -112,16 +104,13 @@ let PgBackupController = (_dec = (0, _inversify.injectable)(), _dec2 = Reflect.m
112
104
  // TODO add e2e test for docker
113
105
 
114
106
  const zipFile = this.fs.listFiles(dir)[0];
115
- await this.zip.unzipDir(zipFile, dir);
116
- this.fs.rmFile(zipFile);
117
- const outFile = this.fs.listFiles(dir)[0];
118
- this.log.debug('Will run psql import from %s', outFile.str()); // Database is set to 'postgres' so that also users which don't have db created can use db-less URL
107
+ this.log.debug('Will run psql import from %s', zipFile.str()); // Database is set to 'postgres' so that also users which don't have db created can use db-less URL
119
108
  // Restoring user needs to have the admin access anyway
120
109
 
121
110
  const connectionArgs = `-h ${con.host} -p ${con.port} -U ${con.username} -d postgres`; // Don't forget that this itself might be run in docker
122
111
  // therefore volume mounts are not usable (will apply to the location at host)
123
112
 
124
- this.sh.exec(`docker run --network host -i ` + `-e PGPASSWORD=${con.password} ` + `postgres:${version} ` + `psql ${connectionArgs} -v ON_ERROR_STOP=0 < ${outFile.str()}`);
113
+ this.sh.exec(`gzip --decompress --stdout ${zipFile.str()} | docker run --network host -i ` + `-e PGPASSWORD=${con.password} ` + `postgres:${version} ` + `psql ${connectionArgs} -v ON_ERROR_STOP=0`);
125
114
  });
126
115
  });
127
116
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ps-aux/nodebup",
3
- "version": "0.9.10",
3
+ "version": "0.10.0",
4
4
  "description": "",
5
5
  "module": "lib/index.js",
6
6
  "main": "lib/index.js",