Mac M1下Flutter Serverpod 2.0.1数据库表缺失启动报错
解决Serverpod 2.0.1在Mac M1上数据库表未创建导致的启动报错
针对你遇到的serverpod_future_call表不存在、数据库无任何表的问题,按以下步骤排查解决:
重新执行迁移流程
先停止所有相关服务,确保迁移环境干净:docker-compose down回到项目根目录,重新生成并应用初始化迁移:
serverpod create-migration --initial serverpod apply-migration最后重新构建并启动服务:
docker-compose up --build注意:执行命令时确保当前终端在Serverpod项目的根目录下,且
serverpodCLI已正确安装。检查数据库卷的持久化配置
打开项目中的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手动创建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服务。
- 使用psql连接数据库(替换对应的用户名、数据库名):
确认数据库连接配置
检查config/serverpod_config.yaml中的数据库配置,确保host、port、username、password、database与docker-compose.yml中的Postgres配置完全一致,避免因连接信息错误导致迁移失败。
内容的提问来源于stack exchange,提问作者Peter Eriksson
相关产品推荐
相关产品推荐

