From 1c10911307b1d428c18a05854df1f864892ed40d Mon Sep 17 00:00:00 2001 From: Annakaee Date: Mon, 29 Jun 2026 04:42:50 +0100 Subject: [PATCH 1/2] fix: implement down in add-loan-events-missing-indexes to drop indexes --- .../1788000000018_add-loan-events-missing-indexes.js | 11 +++++++---- pr_body_1193.md | 8 ++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 pr_body_1193.md diff --git a/backend/migrations/1788000000018_add-loan-events-missing-indexes.js b/backend/migrations/1788000000018_add-loan-events-missing-indexes.js index e5a25267..41d18d35 100644 --- a/backend/migrations/1788000000018_add-loan-events-missing-indexes.js +++ b/backend/migrations/1788000000018_add-loan-events-missing-indexes.js @@ -35,9 +35,12 @@ export const up = (pgm) => { }; /** - * Keep rollback non-destructive because several indexes above may already - * exist from prior migrations with shared names. - * + * @param pgm {import('node-pg-migrate').MigrationBuilder} * @returns {void} */ -export const down = () => {}; +export const down = (pgm) => { + pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_created_at;`); + pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_loan_id_event_type;`); + pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_event_type;`); + pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_borrower;`); +}; diff --git a/pr_body_1193.md b/pr_body_1193.md new file mode 100644 index 00000000..bf53e1de --- /dev/null +++ b/pr_body_1193.md @@ -0,0 +1,8 @@ +Closes #1193 + +### What does this PR do? +This PR implements the missing `down()` function in the `1788000000018_add-loan-events-missing-indexes.js` migration file, which previously leaked four database indexes on rollback. + +### Description +- **Clean Rollbacks:** Replaced the empty `down = () => {}` with explicit `DROP INDEX IF EXISTS` statements for all four indexes (`idx_loan_events_borrower`, `idx_loan_events_event_type`, `idx_loan_events_loan_id_event_type`, and `idx_loan_events_created_at`) created in the `up()` function. +- **Idempotency:** Ensures that rolling back and re-applying migrations works flawlessly without index collision errors. From 28723d98cb2422d91b6156b13fc9465e8c1949a5 Mon Sep 17 00:00:00 2001 From: Annakaee Date: Wed, 1 Jul 2026 14:16:52 +0100 Subject: [PATCH 2/2] chore: add comment about shared index and remove stray md file --- .../1788000000018_add-loan-events-missing-indexes.js | 2 ++ pr_body_1193.md | 8 -------- 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 pr_body_1193.md diff --git a/backend/migrations/1788000000018_add-loan-events-missing-indexes.js b/backend/migrations/1788000000018_add-loan-events-missing-indexes.js index 41d18d35..0b271ec1 100644 --- a/backend/migrations/1788000000018_add-loan-events-missing-indexes.js +++ b/backend/migrations/1788000000018_add-loan-events-missing-indexes.js @@ -40,6 +40,8 @@ export const up = (pgm) => { */ export const down = (pgm) => { pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_created_at;`); + // Note: idx_loan_events_loan_id_event_type is also created by the earlier 1777 composite-indexes migration. + // A partial rollback of just 1788 would drop an index 1777 also owns, but IF EXISTS keeps it safe. pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_loan_id_event_type;`); pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_event_type;`); pgm.sql(`DROP INDEX IF EXISTS idx_loan_events_borrower;`); diff --git a/pr_body_1193.md b/pr_body_1193.md deleted file mode 100644 index bf53e1de..00000000 --- a/pr_body_1193.md +++ /dev/null @@ -1,8 +0,0 @@ -Closes #1193 - -### What does this PR do? -This PR implements the missing `down()` function in the `1788000000018_add-loan-events-missing-indexes.js` migration file, which previously leaked four database indexes on rollback. - -### Description -- **Clean Rollbacks:** Replaced the empty `down = () => {}` with explicit `DROP INDEX IF EXISTS` statements for all four indexes (`idx_loan_events_borrower`, `idx_loan_events_event_type`, `idx_loan_events_loan_id_event_type`, and `idx_loan_events_created_at`) created in the `up()` function. -- **Idempotency:** Ensures that rolling back and re-applying migrations works flawlessly without index collision errors.