You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1下Flutter Serverpod 2.0.1数据库表缺失启动报错

解决Serverpod 2.0.1在Mac M1上数据库表未创建导致的启动报错

针对你遇到的serverpod_future_call表不存在、数据库无任何表的问题,按以下步骤排查解决:

  1. 重新执行迁移流程
    先停止所有相关服务,确保迁移环境干净:

    docker-compose down
    

    回到项目根目录,重新生成并应用初始化迁移:

    serverpod create-migration --initial
    serverpod apply-migration
    

    最后重新构建并启动服务:

    docker-compose up --build
    

    注意:执行命令时确保当前终端在Serverpod项目的根目录下,且serverpod CLI已正确安装。

  2. 检查数据库卷的持久化配置
    打开项目中的docker-compose.yml,确认Postgres服务的卷配置是否正确,确保数据持久化:

    services:
      postgres:
        # 其他配置...
        volumes:
          - postgres_data:/var/lib/postgresql/data/
    volumes:
      postgres_data:
    

    如果之前的卷存在损坏或未正确初始化的情况,删除旧卷后重新启动:

    docker volume rm [你的项目名称]_postgres_data
    docker-compose up --build
    
  3. 手动创建Serverpod系统表
    若迁移命令始终无法生成表,可手动连接数据库创建系统表:

    • 使用psql连接数据库(替换对应的用户名、数据库名):
      psql -h localhost -U postgres -d [你的项目数据库名]
      
    • 执行以下SQL创建serverpod_future_call表及其他基础系统表(适配Serverpod 2.0.1):
      CREATE TABLE serverpod_future_call (
        id SERIAL PRIMARY KEY,
        call_id TEXT NOT NULL,
        method_name TEXT NOT NULL,
        serialized_argument TEXT NOT NULL,
        scheduled_time TIMESTAMP WITH TIME ZONE NOT NULL,
        executed BOOLEAN NOT NULL DEFAULT FALSE,
        retries INTEGER NOT NULL DEFAULT 0,
        created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
      );
      
      CREATE TABLE serverpod_log (
        id SERIAL PRIMARY KEY,
        session_id TEXT,
        message TEXT NOT NULL,
        level INTEGER NOT NULL,
        time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
        endpoint TEXT,
        method TEXT,
        error TEXT,
        stack_trace TEXT
      );
      
      CREATE TABLE serverpod_session (
        id TEXT PRIMARY KEY,
        user_id TEXT,
        created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
        last_active TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
        expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
        data TEXT
      );
      

    执行完成后退出psql,重启Serverpod服务。

  4. 确认数据库连接配置
    检查config/serverpod_config.yaml中的数据库配置,确保host、port、username、password、database与docker-compose.yml中的Postgres配置完全一致,避免因连接信息错误导致迁移失败。

内容的提问来源于stack exchange,提问作者Peter Eriksson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:32:40