数据库
需要团队共享、大规模且可并发的 GrepAI 索引时,用…
适用于团队共享索引、10K+ 文件大型代码库、需要并发访问或接入现有 PostgreSQL 的 GrepAI 环境。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要团队共享、大规模且可并发的 Grep特定
解决思路
- 使用 Docker 运行 PostgreSQL + pgvector(开发推荐):`docker run -d --name grepai-postgres -e POSTGRES_USER=grepai -e POSTGRES_PASSWORD=grepai -e POSTGRES_DB=grepai -p 5432:5432 pgvector/pgvector:pg16`。
- 在已有 PostgreSQL 上安装 pgvector(Ubuntu/Debian):`sudo apt install postgresql-16-pgvector`。
- 从源码编译安装 pgvector:`git clone https://github.com/pgvector/pgvector.git`,`cd pgvector`,`make`,`sudo make install`。
- 在数据库中启用 pgvector 扩展:连接数据库后执行 `CREATE EXTENSION IF NOT EXISTS vector;`。
- 使用托管服务:Supabase 默认包含 pgvector;Neon 提供 pgvector;AWS RDS 安装 pgvector 扩展;Azure Database 提供 pgvector。
- 基础配置 `.grepai/config.yaml`:设置 `store.backend: postgres`,并设置 `store.postgres.dsn: postgres://user:password@localhost:5432/grepai`。
- 使用环境变量配置 DSN:在 `.grepai/config.yaml` 中设置 `store.postgres.dsn: ${DATABASE_URL}`;执行 `export DATABASE_URL="postgres://user:password@localhost:5432/grepai"`。
- 使用完整 DSN:`postgres://user:password@host:5432/database?sslmode=require`;DSN 组件包括 `user`、`password`、`host`、`5432`、`database`、`sslmode`。
- 按场景选择 SSL 模式:本地开发用 `disable`,生产用 `require`,高安全用 `verify-full`。
- 生产环境启用 SSL 的配置示例:`store.backend: postgres`,`store.postgres.dsn: postgres://user:pass@prod.db.com:5432/grepai?sslmode=require`。
- 让 GrepAI 自动创建 `embeddings` 表:包含 `id`、`file_path`、`chunk_index`、`content`、`start_line`、`end_line`、`embedding vector(768)`、`created_at`,并设置 `UNIQUE(file_path, chunk_index)`。
- 创建向量相似度索引:`CREATE INDEX ON embeddings USING ivfflat (embedding vector_cosine_ops);`。
- 检查 pgvector 扩展:执行 `psql -U grepai -d grepai`,再执行 `SELECT * FROM pg_extension WHERE extname = 'vector';`。
- 检查 GrepAI 表:在首次 `grepai watch` 后执行 `\dt` 查看表。
- 从 GrepAI 测试连接:运行 `grepai status`,应显示 PostgreSQL backend 信息。
- 查看 PostgreSQL 存储状态输出:`grepai status` 会显示 Backend、Host、Database、SSL、Files、Chunks、Vector dimension、Connection、IVFFlat index、Search latency 等信息。
- 优化 PostgreSQL 向量操作内存:执行 `SET work_mem = '256MB';`。
- 按硬件调整缓存:执行 `SET effective_cache_size = '4GB';`。
- 按硬件调整共享缓冲区:执行 `SET shared_buffers = '1GB';`。
- 调优 IVFFlat 索引:执行 `CREATE INDEX ON embeddings USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);`,并按行数调整。
- IVFFlat 索引列表数规则:`lists = sqrt(rows)`。
- 支持并发搜索:多个 `grepai search` 命令可同时运行。
- 并发运行 watch:每个代码库运行一个 `grepai watch` daemon。
- 并发共享索引:多个用户可共享同一索引。
- 团队共享数据库:所有成员在各自 `.grepai/config.yaml` 中指向同一 DSN,例如 `store.backend: postgres`,`store.postgres.dsn: postgres://team:secret@shared-db.company.com:5432/grepai`。
- 按项目隔离数据库:执行 `createdb -U postgres grepai_projecta`。
- 按项目隔离数据库:执行 `createdb -U postgres grepai_projectb`。
- 项目 A 配置:在 `.grepai/config.yaml` 中设置 `store.backend: postgres`,`store.postgres.dsn: postgres://user:pass@localhost:5432/grepai_projecta`。
- 备份数据库:执行 `pg_dump -U grepai -d grepai > grepai_backup.sql`。
- 恢复数据库:执行 `psql -U grepai -d grepai < grepai_backup.sql`。
- 从 GOB 迁移:先设置 PostgreSQL + pgvector。
- 从 GOB 迁移:更新配置 `store.backend: postgres`,`store.postgres.dsn: postgres://user:pass@localhost:5432/grepai`。
- 从 GOB 迁移:删除旧索引 `rm .grepai/index.gob`。
- 从 GOB 迁移:运行 `grepai watch` 重新索引。
- 修复密码认证失败:检查 DSN 凭据和 `pg_hba.conf`。
- 修复 `extension "vector" is not available`:执行 `sudo apt install postgresql-16-pgvector`,然后执行 `CREATE EXTENSION vector;`。
- 修复 `type "vector" does not exist`:在数据库中执行 `CREATE EXTENSION IF NOT EXISTS vector;`。
- 修复连接被拒绝:检查 PostgreSQL 是否运行;验证 host 和 port;检查防火墙规则。
- 修复搜索慢:添加 IVFFlat 索引。
- 修复搜索慢:增加 `work_mem`。
- 修复搜索慢:执行 `VACUUM ANALYZE` 维护表。
- 最佳实践:使用环境变量保存数据库凭据,不要提交凭据。
- 最佳实践:为远程数据库启用 SSL。
- 最佳实践:重大变更前定期备份,例如执行 `pg_dump`。
- 最佳实践:监控性能,检查查询时间。
- 最佳实践:维护索引,定期执行 `VACUUM ANALYZE`。
适用边界 · 注意事项
- 不适用于单机、小代码库、无需团队共享/并发访问/持久化,或不想引入 PostgreSQL 依赖的场景。
- 未安装 PostgreSQL 14+ 与 pgvector、数据库用户无建表权限、或无法通过网络访问 PostgreSQL 服务器时不要使用。
- 如果只需要本地单人索引,使用 GOB 等本地存储更简单。