UNPKG

pg-logical-replication

Version:

PostgreSQL Location Replication client - logical WAL replication streaming

40 lines (39 loc) 1.38 kB
"use strict"; 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()); }