首页 > 解决方案 > 在使用 Knex.js 时,我进行了迁移和种子,但种子数据未显示在 PostgreSQL 数据库中

问题描述

所以我不得不为我正在做的一个项目制作一个新的表格和种子数据。当我运行迁移时,我没有问题。我运行种子时没有任何问题,但是当我查看 PostgreSQL 数据库中应该存在的数据时,就像所有其他种子一样。由于某种原因,它没有添加数据,我无法弄清楚为什么会发生这种情况。如果有人可以帮助我找到解决方案,那就太好了。代码和截图如下:

  1. 移民
 exports.up = function (knex) {
  return knex.schema.createTable('alliance', (table) => {
    table.increments('alliance_id').primary()
    table.string('alliance_name')
    table.string('description')
    table.integer('user_id')
    table
      .foreign('user_id')
      .references('user_id')
      .inTable('users')
      .onDelete('cascade')
  })
}

exports.down = function (knex) {
  return knex.schema.dropTable('alliance')
}
  1. 种子
const alliances = require('../seed-data/alliance-data')

exports.seed = function (knex) {
  return knex
    .raw('TRUNCATE TABLE alliance RESTART IDENTITY CASCADE')
    .then(function () {
      return knex('alliance').insert(alliances)
    })
}
  1. 种子数据
module.exports = [
  {
    alliance_id: 0,
    alliance_name: 'test 1',
    description: 'testing 123',
  },
]
  1. Knex 配置
const path = require('path')

require('dotenv').config()

const {
  DATABASE_URL = 'postgresql://postgres@localhost/postgres',
} = process.env

module.exports = {
  development: {
    client: 'postgresql',
    connection: DATABASE_URL,
    pool: { min: 0, max: 100 },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
  },

  production: {
    client: 'postgresql',
    connection: DATABASE_URL,
    pool: { min: 0, max: 100 },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
  },

  test: {
    client: 'sqlite3',
    connection: {
      filename: ':memory:',
    },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },
}
  1. Dbeaver 截图

  2. 没有数据的 dbeaver 截图

标签: postgresqlknex.js

解决方案


这个问题的解决方案是确保你的种子和迁移的顺序正确。


推荐阅读