pg-dump-restore
Version:
Nodejs wrapper around the pg_dump and pg_restore
96 lines (95 loc) • 5.28 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.pgDump = void 0;
const common_1 = require("./common");
const execa_1 = __importDefault(require("execa"));
const pgDump = (connectionOptions, dumpOptions) => __awaiter(void 0, void 0, void 0, function* () {
const os = process.platform;
const { connectionArgs, sslMode } = (0, common_1.getConnectionArgs)(connectionOptions);
const { filePath, format = common_1.FormatEnum.Custom, dataOnly, blobs, noBlobs, clean, create, extensionPattern = [], encoding, jobs, schemaPattern = [], excludeSchemaPattern = [], noOwner, noReconnect, schemaOnly, tablePattern = [], excludeTablePattern = [], verbose, noAcl, compress, binaryUpgrade, columnInserts, disableDollarQuoting, disableTriggers, enableRowSecurity, excludeTableDataPattern = [], extraFloatDigits, ifExists, includeForeignData, inserts, loadViaPartitionRoot, lockWaitTimeout, noComments, noPublications, noSecurityLabels, noSubscriptions, noSync, noSynchronizedSnapshots, noTableSpaces, noToastCompression, noUnloggedTableData, onConflictDoNothing, quoteAllIdentifiers, rowsPerInsert, sectionName = [], serializableDeferrable, snapshotName, strictNames, useSetSessionAuthorization, roleName, version, noPrivileges, } = dumpOptions;
connectionArgs.push(`--format=${format}`);
if (filePath)
connectionArgs.push(`--file=${filePath}`);
connectionArgs.push(...extensionPattern.map((item) => `--extension=${item}`));
if (encoding)
connectionArgs.push(`--encoding=${encoding}`);
if (jobs)
connectionArgs.push(`--jobs=${jobs}`);
connectionArgs.push(...schemaPattern.map((item) => `--schema=${item}`));
connectionArgs.push(...excludeSchemaPattern.map((item) => `--exclude-schema=${item}`));
connectionArgs.push(...tablePattern.map((item) => `--table=${item}`));
connectionArgs.push(...excludeTablePattern.map((item) => `--exclude-table=${item}`));
if (compress !== undefined)
connectionArgs.push(`--compress=${compress}`);
connectionArgs.push(...excludeTableDataPattern.map((item) => `--exclude-table-data=${item}`));
if (extraFloatDigits !== undefined)
connectionArgs.push(`--extra-float-digits=${extraFloatDigits}`);
if (includeForeignData)
connectionArgs.push(`--include-foreign-data=${includeForeignData}`);
if (lockWaitTimeout)
connectionArgs.push(`--lock-wait-timeout=${lockWaitTimeout}`);
if (rowsPerInsert !== undefined)
connectionArgs.push(`--rows-per-insert=${rowsPerInsert}`);
connectionArgs.push(...sectionName.map((item) => `--section=${item}`));
if (snapshotName)
connectionArgs.push(`--snapshot=${snapshotName}`);
if (roleName)
connectionArgs.push(`--role=${roleName}`);
const paramsMap = {
blobs,
clean,
create,
inserts,
verbose,
version,
'binary-upgrade': binaryUpgrade,
'column-inserts': columnInserts,
'data-only': dataOnly,
'disable-dollar-quoting': disableDollarQuoting,
'disable-triggers': disableTriggers,
'enable-row-security': enableRowSecurity,
'if-exists': ifExists,
'load-via-partition-root': loadViaPartitionRoot,
'no-acl': noAcl,
'no-blobs': noBlobs,
'no-comments': noComments,
'no-owner': noOwner,
'no-publications': noPublications,
'no-reconnect': noReconnect,
'no-security-labels': noSecurityLabels,
'no-subscriptions': noSubscriptions,
'no-sync': noSync,
'no-synchronized-snapshots': noSynchronizedSnapshots,
'no-tablespaces': noTableSpaces,
'no-toast-compression': noToastCompression,
'no-unlogged-table-data': noUnloggedTableData,
'no-privileges': noPrivileges,
'on-conflict-do-nothing': onConflictDoNothing,
'quote-all-identifiers': quoteAllIdentifiers,
'schema-only': schemaOnly,
'serializable-deferrable': serializableDeferrable,
'strict-names': strictNames,
'use-set-session-authorization': useSetSessionAuthorization,
};
Object.keys(paramsMap).forEach((key) => {
if (paramsMap[key])
connectionArgs.push(`--${key}`);
});
const env = {};
if (sslMode)
env.PGSSLMODE = sslMode;
return yield (0, execa_1.default)(os == 'win32' ? 'pg_dump.exe' : 'pg_dump', connectionArgs, { env });
});
exports.pgDump = pgDump;