#javascript #node.js #postgresql #knex.js #knexjs
#javascript #node.js #postgresql #knex.js
Вопрос:
Я использовал knex.js успешно работая уже некоторое время над этим проектом, я впервые столкнулся с этим. Я удалил все свои файлы миграции и удалил свою базу данных (локально) и вместо этого использовал pg_dump для получения DDL и всех данных из моей базы данных prod (не включая таблицы knex_migrations или knex_migrations_lock).
Я создал новый сценарий миграции и использовал knex.raw
для вставки всего SQL. Когда я запустил сценарий миграции, я получаю следующее:
error: insert into "knex_migrations" ("batch", "migration_time", "name") values ($1, $2, $3) - relation "knex_migrations" does not exist
Этот сценарий миграции выполняется в совершенно новой базе данных. Когда я меняю то, что есть в скрипте, на простой DDL, он работает нормально. Итак, что-то в результате pg_dump и попытки запустить его с помощью knex вызывает сбой.
На самом деле это тоже не тонна данных, поэтому я не совсем уверен, где я ошибаюсь — knex отвечает за создание таблиц миграции, и я убедился, что в DDL нет упоминания о knex или таблицах миграции.
Любые предложения будут с благодарностью приняты 🙂
Ответ №1:
Таблица knex_migrations
и knex_migrations_lock
будет создана при выполнении команды
knex migrate:make <name of migration>
Не могли бы вы подтвердить, что выполнили приведенную выше команду knex.
Как только это будет сделано, запуск
knex migrate:latest
следует создать всю схему, которую вы упомянули. knex.raw
Ответ №2:
Используя pd_dump для сброса базы данных в файл sql, в начале sql появляются некоторые дополнительные строки, такие как:
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
прокомментируйте их, и миграция должна сработать. Вы можете раскомментировать по одному оператору за раз, чтобы увидеть, какой из них вызывает проблему.
Ответ №3:
Я только что спустился в эту дыру. Следующая строка является виновником.
SELECT pg_catalog.set_config('search_path', '', false);
Он удаляет ваш путь поиска, поэтому knex не знает, где что-либо найти.