The migrations runner executes the entire file content in a single transaction, so the Down section DROP statements were being executed immediately after the Up section, causing tables to be created then dropped within the same transaction.