1. 更新系统并安装必要工具
sudoaptupdatesudoaptinstall-ywgetca-certificates gnupg lsb-release2. 导入 PostgreSQL archive 仓库 GPG 密钥
wget-qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudogpg --dearmor -o /usr/share/keyrings/postgresql-archive.gpg3. 添加 PostgreSQL 16 archive 仓库
echo"deb [signed-by=/usr/share/keyrings/postgresql-archive.gpg] https://apt-archive.postgresql.org/pub/repos/apt focal-pgdg-archive main"|sudotee/etc/apt/sources.list.d/pgdg-archive.list注意:如果之前添加过http://apt.postgresql.org/pub/repos/apt focal-pgdg的仓库,需要删除:
sudorm/etc/apt/sources.list.d/pgdg.list4. 更新软件源索引
sudoaptupdate此时应该看到focal-pgdg-archive成功更新。
5. 安装 PostgreSQL 16 与 pgvector
sudoaptinstall-y postgresql-16 postgresql-client-16 postgresql-contrib-16sudoaptinstall-y postgresql-16-pgvector6. 启动 PostgreSQL 并设置开机自启
sudosystemctl start postgresqlsudosystemctlenablepostgresql7. 切换到 PostgreSQL 系统用户并进入 psql
sudo-i -u postgres psql提示符应为:
postgres=#8. 设置超级用户密码
ALTERUSERpostgres PASSWORD'root';- 密码
root仅为示例,生产环境请使用安全密码
9. 配置允许内网访问
编辑 pg_hba.conf:
sudovim/etc/postgresql/16/main/pg_hba.conf在文件末尾追加(假设内网段是 10.0.0.0/8):
# Allow internal network access host all all 10.0.0.0/8 scram-sha-256如果只想允许单台机器,例如 10.0.4.10:
host all all 10.0.4.10/32 scram-sha-25610. 修改监听地址
编辑 postgresql.conf:
sudovi/etc/postgresql/16/main/postgresql.conf找到:
#listen_addresses = 'localhost'改为:
listen_addresses = '*'或只监听内网 IP:
listen_addresses = '10.0.4.121'11. 重启 PostgreSQL
sudosystemctl restart postgresql12. 验证服务监听
ss -lntp|grep5432应看到:
0.0.0.0:5432 [::]:5432说明 PostgreSQL 已对内网开放。
13. 验证 pgvector 插件
CREATEEXTENSIONIFNOTEXISTSvector;SELECTextname,extversionFROMpg_extensionWHEREextname='vector';输出示例:
extname | extversion ---------+------------ vector | 0.8.014. 创建向量存储示例表
CREATETABLEembedding_store(id bigserialPRIMARYKEY,biz_idvarchar(64),contenttextNOTNULL,embedding vector(1536)NOTNULL,metadata jsonb,created_at timestamptzDEFAULTnow());- 1536 是 OpenAI Embedding 默认维度,可按需修改
15. 插入测试数据
INSERTINTOembedding_store(biz_id,content,embedding,metadata)VALUES('test-1','pgvector test record',array_fill(0.01,ARRAY[1536])::vector,'{"source": "manual_test"}');16. 向量相似度查询示例
SELECTid,biz_id,content,embedding<=>array_fill(0.01,ARRAY[1536])::vectorASdistanceFROMembedding_storeORDERBYdistanceLIMIT3;17. 创建向量索引(HNSW,提升大数据性能)
CREATEINDEXembedding_store_hnsw_idxONembedding_storeUSINGhnsw(embedding vector_l2_ops)WITH(m=16,ef_construction=200);-- 查询前设置搜索参数SEThnsw.ef_search=40;18. 内网访问测试
从内网其他机器执行:
psql -h10.0.4.10 -U postgres -d postgres -W输入密码root,即可登录。
19. 生产环境安全建议
- 不要用 postgres 做业务操作
- 创建专用业务用户:
CREATEUSERmyappWITHPASSWORD'MyAppPass123';CREATEDATABASEmyappdb OWNER myapp;- 防火墙控制内网访问
sudoufw allow from10.0.0.0/8 to any port5432sudoufw reload- 不要直接暴露 0.0.0.0 到公网
- 仅内网访问或 VPN
以上就是Ubuntu 20.04 + PostgreSQL 16 + pgvector + 内网访问 + 密码设置 + 向量表 + HNSW 索引的完整流程