pg-logical-replication
Version:
PostgreSQL Location Replication client - logical WAL replication streaming
40 lines (39 loc) • 1.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Wal2JsonPlugin = void 0;
const abstract_plugin_js_1 = require("../abstract.plugin.js");
const wal2json_plugin_options_type_js_1 = require("./wal2json-plugin-options.type.js");
/**
* wal2json
* https://github.com/eulerto/wal2json
*/
class Wal2JsonPlugin extends abstract_plugin_js_1.AbstractPlugin {
constructor(options) {
super(options || {});
}
get name() {
return 'wal2json';
}
async start(client, slotName, lastLsn) {
const options = [];
Object.entries(this.options).map(([key, value]) => {
if (wal2json_plugin_options_type_js_1.StringOptionKeys.includes(key))
options.push(`"${dashCase(key)}" '${value}'`);
else
options.push(`"${dashCase(key)}" '${value ? 'on' : 'off'}'`);
});
let sql = `START_REPLICATION SLOT "${slotName}" LOGICAL ${lastLsn}`;
if (options.length > 0)
sql += ` (${options.join(' , ')})`;
// console.log(sql);
return client.query(sql);
}
parse(buffer) {
// console.log(buffer.toString());
return JSON.parse(buffer.toString());
}
}
exports.Wal2JsonPlugin = Wal2JsonPlugin;
function dashCase(str) {
return (str || '').replace(/[A-Z]/g, (found) => '-' + found.toLowerCase());
}