Ненавижу отвечать на свой вопрос, но я поняла, что происходит. Спасибо всем, кто ответил.
У всех, кто пытался сделать то же самое, было несколько проблем с этим кодом.
Сначала ошибка о том, что "undefined" была вызвана
let sql;
sql += fs.readFileSync(path.join(schemaFilePath, file), "utf8");
В самом начале оператора SQL было сгенерировано «неопределенное». Решено
let sql = "";
Далее я столкнулся с проблемой плохих персонажей, которые на этот раз были совершенно невидимыми и найти их было сложно. Я смог найти их только путем записи содержимого строки обратно в файл, в котором я увидел кучу недопустимых символов, которые, как мне кажется, не совместимы с UTF-8.
Это было из-за того, что скрытые файлы были удалены из файловой системы. ie
schemaFiles.forEach(file => {
sql += fs.readFileSync(path.join(schemaFilePath, file), "utf8");
});
Как и в случае с Ma c, оказывается, что он также загружал эти надоедливые файлы .DS_Store, которые вставляли двоичный мусор, хотя это не было видно на экране, только после записи содержимого обратно в плоский файл.
Я собирался попробовать psql загрузить его. psql дал мне лучшее сообщение об ошибке.
Решено это путем фильтрации только. sql files
schemaFiles.forEach(file => {
if (file.substr(file.length - 4) === ".sql") {
code ....
}
})
Наконец, у меня были проблемы с загрузкой файлов схемы из-за CONSTRAINTS и таблиц отсутствует в схеме, поэтому я использую pg_dump
для получения допустимого файла схемы, исключая таблицы миграции knex
pg_dump --schema-only --exclude-table=knex* > db/schema.sql
Теперь файл миграции по сути состоит из одной строки
return knex.raw(fs.readFileSync(path.join(__dirname, "../db/schema.sql"), "utf8"));
Надеюсь, это поможет любому, кто застрянет