【问题标题】:Knex migration don't create the tablesKnex 迁移不创建表
【发布时间】:2020-04-18 16:34:44
【问题描述】:

最近我一直在尝试将 knexjs 与 docker 一起使用,但遇到了奇怪的错误。当我使用以下命令在容器内运行 knex migrate:latest 时: docker exec service sh -c "knex migrate:latest";一切正常,但实际上并未在数据库中创建表。

我的迁移:

exports.up = knex => {
  return Promise.all([
    knex.schema.createTable('users', table => { 
      table.increments('id').primary();
      table.string('name').notNullable();
      table.string('username').unique().notNullable();
      table.string('email').unique().notNullable();
      table.string('password').notNullable();
      table.datetime('created_at').notNullable();
    }),
    knex.schema.createTable('user_settings',  table => {
      table.integer('user_id');
      table.integer('xp');
    }),
  ])
}

exports.down =  knex => {
  return Promise.all([
    knex.schema.dropTable('users'),
    knex.schema.dropTable('user_settings'),
  ])
}

我的 Knex 文件

module.exports = {
  client: 'pg',
  debug:true,
  connection: {
    host:'postgres',
    user: 'postgres',
    password: 'postgres',
    port: '',
    database: 'users'
  },
  migrations: {
    tableName: 'knex_migrations'
  }
};

我的 docker-compose

version: '3'
services:
  postgres:
    image: postgres
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 10
    volumes:
      - ./postgres:/app
    ports:
      - "5432:5432"
  users:
    container_name: users-service
    restart: always
    build: ./users
    depends_on:
      - postgres
    volumes:
      - ./users:/app
    ports:
      - '3000:3000'

我可以看到序列knex_migrations_id_seq、knex_migrations_lock_index_seq和users_id_seq已经被创建了。

【问题讨论】:

    标签: node.js docker docker-compose migration knex.js


    【解决方案1】:

    Knex 不会在不创建表格的情况下创建序列。我已经尝试使用用于 Stack Overflow 问题的本地测试设置进行迁移,并且效果很好(堆栈使用 docker-compose,尽管配置与您的配置略有不同)。

    表格似乎不存在的原因可能有多种,具体取决于您使用什么来查找它们。最简单的方法可能是使用以下方式连接到您的数据库:

    psql postgres://postgres:postgres@localhost/users
    

    然后发出\dt 命令。如果您没有看到列出的表格,您可以尝试\dn+ 来显示每个可用的架构和权限。专门通过\d users(甚至\d public.users)询问桌子可能会有所帮助。

    如果您仍然无法“看到”这些表格,也许可以编辑您的问题,详细说明您是如何测试它们的,有人可能会提供进一步的帮助。

    这是一个简单的docker-compose.yml,您可以尝试迁移:

    version: '3.1'
    
    services:
    
      postgres:
        image: postgres:11
        restart: always
        environment:
          POSTGRES_PASSWORD: example
          POSTGRES_USER: example
          POSTGRES_DB: users
        ports:
          - 5432:5432
    
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
    

    如果 psql 不是您的首选工具,您可以使用 http://localhost:8080 上的管理员 Web 界面浏览数据库。

    【讨论】:

    • 我还是看不到表格,很想看看你正在使用的配置!另外,我可以添加哪些对此有用的信息?
    • 好吧,也许是迁移的输出(建议添加.debug() 以获取更多详细信息)以及有关如何检查表是否存在的更多信息。我将添加一个示例docker-compose.yml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2020-03-07
    • 2015-05-25
    • 2019-08-12
    相关资源
    最近更新 更多