Knex迁移不会创建表

时间:2019-12-29 18:35:32

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

最近我一直在尝试将knexjs与docker结合使用,但遇到了奇怪的错误。当我使用以下命令在容器中运行knex migration:latest时:docker exec service sh -c“ knex migration: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'),
  ])
}

我的Knexfile

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。

1 个答案:

答案 0 :(得分:0)

如果不创建表,Knex将不会创建序列。我已经使用用于堆栈溢出问题的本地测试设置尝试了您的迁移,并且运行良好(堆栈使用docker-compose,尽管配置与您的配置略有不同)。

表似乎不存在的原因可能有多种,具体取决于您要使用的表。最简单的方法可能是使用以下方法连接到数据库:

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

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

如果您仍然无法“查看”表格,也许可以用关于如何测试它们的更多详细信息来编辑您的问题,然后有人可能会进一步提供帮助。