Yo uso un sistema muy simple.
Incrusto como una
constante el archivo con las migraciones dentro del .exe, en este formato:
Código SQL
[-]
--version: 2
DROP TRIGGER IF EXISTS visit_code_update_tg ON payment;
--version: 3
ALTER TABLE doc_codes
ADD COLUMN doc_code TEXT PRIMARY KEY DEFAULT generate_ulid() CHECK (not_empty(doc_code));
Eso lo comparo contra la version de la BD y simplemente es partir el archivo, chequear la version y recorrerlo.