[英]Knex.js migration issue: Fails with ` relation "knex_migrations" does not exist`
我已經在這個項目上成功使用了一段時間的 knex.js,這是我第一次遇到這個。 我刪除了所有遷移文件並刪除了我的數據庫(本地),而是使用 pg_dump 從我的 prod 數據庫(不包括 knex_migrations 或 knex_migrations_lock 表)中獲取 DDL 和所有數據。
我創建了一個新的遷移腳本並使用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 或遷移表.
任何建議將不勝感激:)
運行命令時將創建表knex_migrations
和knex_migrations_lock
knex migrate:make <name of migration>
您能否確認您已執行上述 knex 命令。
一旦完成運行
knex migrate:latest
應該創建您提到的所有架構。 knex.raw
使用 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;
將它們注釋掉,遷移應該可以工作。 您可以一次取消注釋一個語句,以查看導致問題的語句。
我剛進了這個洞。 以下行是罪魁禍首。
SELECT pg_catalog.set_config('search_path', '', false);
它正在刪除您的搜索路徑,因此 knex 不知道在哪里可以找到任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.