@clickup/pg-microsharding
Version:
Microshards support for PostgreSQL
35 lines • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cleanUpPubSub = cleanUpPubSub;
const names_1 = require("./names");
const quote_1 = require("./quote");
const runSql_1 = require("./runSql");
/**
* Removes all traces of logical replication from the schema.
*/
async function cleanUpPubSub({ fromDsn, toDsn, schema, }) {
const subExists = await runSql_1.runSql.one(toDsn, (0, quote_1.sql) `
SELECT 1
FROM pg_subscription
JOIN pg_database ON pg_database.oid = subdbid AND datname = current_database()
WHERE subname = ${(0, names_1.subName)(schema)}
`);
if (subExists) {
await (0, runSql_1.runSql)(toDsn, (0, quote_1.sql) `ALTER SUBSCRIPTION ${(0, quote_1.ident)((0, names_1.subName)(schema))} DISABLE`, "Disabling the destination subscription");
await (0, runSql_1.runSql)(toDsn, (0, quote_1.sql) `ALTER SUBSCRIPTION ${(0, quote_1.ident)((0, names_1.subName)(schema))} SET (slot_name = NONE)`, "Disjoining destination subscription from the replication slot");
await (0, runSql_1.runSql)(toDsn, (0, quote_1.sql) `DROP SUBSCRIPTION ${(0, quote_1.ident)((0, names_1.subName)(schema))} CASCADE`, "Dropping destination subscription");
}
await (0, runSql_1.runSql)(fromDsn, (0, quote_1.sql) `
SELECT pg_terminate_backend(active_pid)
FROM pg_replication_slots
WHERE database = current_database() AND slot_name = ${(0, names_1.subName)(schema)} AND active_pid IS NOT NULL;
SELECT pg_drop_replication_slot(slot_name)
FROM pg_replication_slots
WHERE database = current_database() AND slot_name = ${(0, names_1.subName)(schema)}
`);
const pubExists = await runSql_1.runSql.one(fromDsn, (0, quote_1.sql) `SELECT 1 FROM pg_publication WHERE pubname = ${(0, names_1.pubName)(schema)}`);
if (pubExists) {
await (0, runSql_1.runSql)(fromDsn, (0, quote_1.sql) `DROP PUBLICATION ${(0, quote_1.ident)((0, names_1.pubName)(schema))}`, "Dropping source publication");
}
}
//# sourceMappingURL=cleanUpPubSub.js.map