簡體   English   中英

Knex.js 遷移問題:因`關系“knex_migrations”不存在而失敗`

[英]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_migrationsknex_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM