postgresql 向量库安装备忘录

302 阅读3分钟

1、postgresql作为向量数据库使用前提

1.1 第一步需要安装pgvector扩展

1.2 第二步还需要安装pgml扩展


db=# CREATE EXTENSION IF NOT EXISTS pgml;

INFO:  Python version: 3.12.4 (main, Jun  6 2024, 18:26:44) [Clang 15.0.0 (clang-1500.3.9.4)], executable: /Library/PostgreSQL/16/bin/postgres

ERROR:  The lightgbm package is missing. Install it with `sudo pip3 install lightgbm`

ModuleNotFoundError: No module named 'lightgbm'

db=# CREATE EXTENSION IF NOT EXISTS pgml;

INFO:  Python version: 3.12.4 (main, Jun  6 2024, 18:26:44) [Clang 15.0.0 (clang-1500.3.9.4)], executable: /Library/PostgreSQL/16/bin/postgres

ERROR:  The sklearn package is missing. Install it with `sudo pip3 install sklearn`

ModuleNotFoundError: No module named 'sklearn'

pgml需要安装依赖xgboost,lightgbm, sklearn等。

The 'sklearn' PyPI package is deprecated, use 'scikit-learn' rather than 'sklearn' for pip commands.

这次选择升级为scikit-learn。这些插件都安装成功后,终于完成了pgml的安装。

db=# CREATE EXTENSION IF NOT EXISTS pgml;

INFO:  Python version: 3.12.4 (main, Jun  6 2024, 18:26:44) [Clang 15.0.0 (clang-1500.3.9.4)], executable: /Library/PostgreSQL/16/bin/postgres

INFO:  Scikit-learn 1.5.1, XGBoost 2.1.0, LightGBM 4.4.0, NumPy 2.0.0

CREATE EXTENSION

2、如何在python虚拟环境下安装module

在安装这些module踩了一些坑,这里做一下记录。

2.1 新建虚拟环境

在python中有个虚拟环境的概念。 我在本地通过如下命令新建了一个虚拟环境:

python3 -m venv ~/.local/venv
source ~/.local/venv/bin/activate

这个会在当前用户目录下新建一个venv作为虚拟目录。先在环境变量里面设置好PYTHONPATH,值为 ~/.local/venv/lib/python3.12/site-packages,当前我的python版本是3.12。这个具体路径需要查询一下。

2.2 虚拟环境下执行python命令

后续的操作都需要在这个虚拟环境下进行,第一步先进入当前目录:

cd ~/.local/venv/bin

然后使用当前目录下的pip3执行,如果使用系统默认的pip3会出现如下错误:

image.png

切换到bin目录的pip3执行即可成功。

image.png

3、postgresql参数调整

当使用PostgreSQL作为向量数据库时,合理设置内存参数是非常重要的。以下是一些关键的内存设置建议和步骤:

3.1 共享缓冲区(shared_buffers)

  • 这是PostgreSQL使用的共享内存缓冲区的大小。通常设置为服务器物理内存的25%-40%。例如,如果你有32GB的内存,可以设置为8GB到16GB。
shared_buffers = 16GB
```[^23^]

3.2 工作内存(work_mem)

  • 用于排序操作和哈希表等操作的内存。每个连接和每个操作都会使用此内存。通常设置为16MB到256MB,但具体值取决于并发连接数和查询的复杂性。
work_mem = 64MB
```[^24^]

3.3 维护工作内存(maintenance_work_mem)

  • 用于维护操作(如创建索引、VACUUM和ANALYZE)的内存。应比work_mem大,可以设置为512MB到数GB。
maintenance_work_mem = 2GB

3.4 有效缓存大小(effective_cache_size)

  • 这是操作系统文件系统缓存大小的一个估计值,PostgreSQL使用它来决定查询计划。通常设置为服务器物理内存的50%-75%。
    effective_cache_size = 24GB

3.5 临时文件缓冲区(temp_buffers)

  • 这是会话级别的临时缓冲区大小。通常设置为8MB到64MB。
   temp_buffers = 64MB

3.6 WAL缓冲区(wal_buffers)

  • 用于写前日志(WAL)的缓冲区大小。对于大多数应用,16MB是一个合理的默认值。
wal_buffers = 16MB

3.7 最大连接数(max_connections)

  • 调整最大连接数和最大工作进程数来匹配服务器的能力。
max_connections = 200
max_worker_processes = 16

3.8 自动真空(autovacuum)

  • 调整自动真空参数以优化数据库维护。
autovacuum = on
autovacuum_max_workers = 3
autovacuum_work_mem = 256MB
autovacuum_vacuum_scale_factor = 0.05

3.9 日志设置

  • 调整日志参数以便于监控和调试。
log_destination = csvlog
log_directory = pg_log
logging_collector = on
log_min_duration_statement = 800
log_rotation_size = 1024MB
log_truncate_on_rotation = on
log_filename = 'xl_log_%a.log'

3.10 调整方法

  • 编辑PostgreSQL配置文件(通常是postgresql.conf),然后重启PostgreSQL以使更改生效。
sudo service postgresql restart

通过以上步骤和设置,可以优化PostgreSQL作为向量数据库时的内存使用和整体性能。