diff --git a/database/migrations/1770000002700_release_inspections_catalog_tablespace.ts b/database/migrations/1770000002700_release_inspections_catalog_tablespace.ts new file mode 100644 index 0000000..ec4d067 --- /dev/null +++ b/database/migrations/1770000002700_release_inspections_catalog_tablespace.ts @@ -0,0 +1,27 @@ +import { BaseSchema } from '@adonisjs/lucid/schema' + +/** + * release_inspections in the catalog's tablespace (default_tablespace: nvme + * on homelab), not CHUNK_TABLESPACE: the prober writes it every flush and + * the merger looks stems up in it (release_inspections_inner_stem_idx), so it + * isn't only read per release any more (migration 1700). Its flushes took + * 35–83 s a minute with the table on the HDD (LOG.md 2026-10-13 (43)). + * Homelab was moved by hand first; here a no-op when it's there already, or + * without a default tablespace (tests). + */ +export default class extends BaseSchema { + async up() { + this.defer(async (db) => { + const { rows } = await db.rawQuery( + `SELECT current_setting('default_tablespace') AS target, + (SELECT t.spcname FROM pg_class c LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace WHERE c.relname = 'release_inspections') AS current` + ) + const { target, current } = rows[0] + if (!target || current === target) return + await db.rawQuery(`ALTER TABLE release_inspections SET TABLESPACE ${target}`) + await db.rawQuery(`ALTER INDEX release_inspections_pkey SET TABLESPACE ${target}`) + }) + } + + async down() {} +}