rag / README-cleanup.md
gaojintao01
feat: pg
40282a8

PostgreSQL 迁移失败清理方案

概述

本目录包含了清理 AnythingLLM 项目 PostgreSQL 数据库中失败迁移记录的多种方案。

问题背景

  • PostgreSQL 迁移因 P3009 错误失败
  • 初始迁移 20230921191814_init 在 2025-09-27 04:54:44.002007 UTC 失败
  • 所有迁移文件中的 DATETIME 类型已修复为 TIMESTAMP
  • 需要清理数据库中的失败迁移记录,以便重新执行迁移

清理方案

方案一:使用自动化脚本(推荐)

1. Node.js 脚本

# 安装依赖(如果需要)
npm install pg

# 运行脚本
node cleanup-postgresql-migrations.js

2. Shell 脚本(Linux/macOS)

# 赋予执行权限
chmod +x quick-cleanup.sh

# 运行脚本
./quick-cleanup.sh

方案二:手动 SQL 执行

1. 使用 psql 命令行

# 连接到数据库
psql -h rag-ai.e.aivencloud.com -p 15005 -U [用户名] -d [数据库名] sslmode=require

# 执行 SQL 文件
\i cleanup-migrations.sql

2. 手动执行 SQL 命令

-- 查看失败迁移
SELECT * FROM _prisma_migrations WHERE finished_at IS NULL;

-- 创建备份
CREATE TABLE _prisma_migrations_backup AS 
SELECT * FROM _prisma_migrations 
WHERE finished_at IS NULL;

-- 删除失败记录
DELETE FROM _prisma_migrations WHERE finished_at IS NULL;

-- 验证结果
SELECT * FROM _prisma_migrations;

方案三:使用 GUI 工具

1. pgAdmin

  1. 连接到 PostgreSQL 服务器
  2. 选择数据库
  3. 打开查询工具
  4. 执行 cleanup-migrations.sql 中的 SQL 命令

2. DBeaver

  1. 创建新连接
  2. 输入连接参数:
    • 主机:rag-ai.e.aivencloud.com
    • 端口:15005
    • 数据库:[数据库名]
    • 用户名:[用户名]
    • 密码:[密码]
    • SSL:必需
  3. 执行 SQL 脚本

3. 其他工具

  • DataGrip
  • Navicat
  • HeidiSQL
  • TablePlus

清理后的操作

清理完成后,可以重新执行迁移:

# 进入 server 目录
cd server

# 开发环境
npx prisma migrate dev

# 生产环境
npx prisma migrate deploy

文件说明

注意事项

  1. 备份重要:执行任何删除操作前,确保已备份重要数据
  2. SSL 连接:Aiven PostgreSQL 需要 SSL 连接
  3. 权限要求:确保数据库用户有足够的权限
  4. 生产环境:在生产环境执行前,先在测试环境验证

常见问题

Q: 如何检查迁移是否成功?

A: 运行以下命令查看迁移状态:

SELECT * FROM _prisma_migrations ORDER BY finished_at DESC;

Q: 清理后数据会丢失吗?

A: 不会。我们只清理迁移记录,不删除业务数据。

Q: 如果清理失败怎么办?

A: 检查数据库连接和权限,确保使用正确的 SSL 设置。

支持

如果遇到问题,请检查:

  1. 数据库连接参数是否正确
  2. 是否有足够的数据库权限
  3. 网络连接是否正常
  4. SSL 证书是否有效