Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Knex迁移don';不要创建表格_Node.js_Docker_Docker Compose_Migration_Knex.js - Fatal编程技术网

Node.js Knex迁移don';不要创建表格

Node.js Knex迁移don';不要创建表格,node.js,docker,docker-compose,migration,knex.js,Node.js,Docker,Docker Compose,Migration,Knex.js,最近我一直在尝试将knexjs与docker一起使用,我遇到了奇怪的错误。当我在容器中使用命令:docker exec service sh-c“knex migrate:latest”运行knex migrate:latest时;一切正常,但表实际上并不是在数据库中创建的 我的迁移: exports.up = knex => { return Promise.all([ knex.schema.createTable('users', table => {

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

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

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已经创建。

knex不会在不创建表的情况下创建序列。我用一个用于堆栈溢出问题的本地测试设置尝试了您的迁移,它运行良好(堆栈使用
docker compose
,尽管配置与您的略有不同)

可能有多种原因导致这些表不存在,这取决于您正在使用什么来查找它们。最简单的方法可能是使用以下连接到数据库:

psql postgres://postgres:postgres@localhost/users
然后发出
\dt
命令。如果看不到列出的表,可以尝试
\dn+
显示每个表的可用架构和权限。通过
\d用户
(甚至
\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不是您的首选工具,您可以使用上的管理员web界面浏览数据库。

我仍然看不到表,希望看到您正在使用的配置!还有,我可以添加哪些信息对这一目的有用?好的,也许是迁移的输出(建议添加
.debug()
以了解更多详细信息)以及有关如何检查表是否存在的更多信息。我将添加一个示例
docker compose.yml