1. 更新系统并安装必要工具
bash
sudo apt update
sudo apt install -y wget ca-certificates gnupg lsb-release
2. 导入 PostgreSQL archive 仓库 GPG 密钥
bash
wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /usr/share/keyrings/postgresql-archive.gpg
3. 添加 PostgreSQL 16 archive 仓库
bash
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive.gpg] https://apt-archive.postgresql.org/pub/repos/apt focal-pgdg-archive main" | sudo tee /etc/apt/sources.list.d/pgdg-archive.list
注意 :如果之前添加过 http://apt.postgresql.org/pub/repos/apt focal-pgdg 的仓库,需要删除:
bash
sudo rm /etc/apt/sources.list.d/pgdg.list
4. 更新软件源索引
bash
sudo apt update
此时应该看到 focal-pgdg-archive 成功更新。
5. 安装 PostgreSQL 16 与 pgvector
bash
sudo apt install -y postgresql-16 postgresql-client-16 postgresql-contrib-16
sudo apt install -y postgresql-16-pgvector
6. 启动 PostgreSQL 并设置开机自启
bash
sudo systemctl start postgresql
sudo systemctl enable postgresql
7. 切换到 PostgreSQL 系统用户并进入 psql
bash
sudo -i -u postgres
psql
提示符应为:
postgres=#
8. 设置超级用户密码
sql
ALTER USER postgres PASSWORD 'root';
- 密码
root仅为示例,生产环境请使用安全密码
9. 配置允许内网访问
编辑 pg_hba.conf:
bash
sudo vim /etc/postgresql/16/main/pg_hba.conf
在文件末尾追加(假设内网段是 10.0.0.0/8):
conf
# Allow internal network access
host all all 10.0.0.0/8 scram-sha-256
如果只想允许单台机器,例如 10.0.4.10:
conf
host all all 10.0.4.10/32 scram-sha-256
10. 修改监听地址
编辑 postgresql.conf:
bash
sudo vi /etc/postgresql/16/main/postgresql.conf
找到:
conf
#listen_addresses = 'localhost'
改为:
conf
listen_addresses = '*'
或只监听内网 IP:
conf
listen_addresses = '10.0.4.121'
11. 重启 PostgreSQL
bash
sudo systemctl restart postgresql
12. 验证服务监听
bash
ss -lntp | grep 5432
应看到:
0.0.0.0:5432
[::]:5432
说明 PostgreSQL 已对内网开放。
13. 验证 pgvector 插件
sql
CREATE EXTENSION IF NOT EXISTS vector;
SELECT extname, extversion FROM pg_extension WHERE extname='vector';
输出示例:
extname | extversion
---------+------------
vector | 0.8.0
14. 创建向量存储示例表
sql
CREATE TABLE embedding_store (
id bigserial PRIMARY KEY,
biz_id varchar(64),
content text NOT NULL,
embedding vector(1536) NOT NULL,
metadata jsonb,
created_at timestamptz DEFAULT now()
);
- 1536 是 OpenAI Embedding 默认维度,可按需修改
15. 插入测试数据
sql
INSERT INTO embedding_store (biz_id, content, embedding, metadata)
VALUES (
'test-1',
'pgvector test record',
array_fill(0.01, ARRAY[1536])::vector,
'{"source": "manual_test"}'
);
16. 向量相似度查询示例
sql
SELECT
id,
biz_id,
content,
embedding <=> array_fill(0.01, ARRAY[1536])::vector AS distance
FROM embedding_store
ORDER BY distance
LIMIT 3;
17. 创建向量索引(HNSW,提升大数据性能)
sql
CREATE INDEX embedding_store_hnsw_idx
ON embedding_store
USING hnsw (embedding vector_l2_ops)
WITH (
m = 16,
ef_construction = 200
);
-- 查询前设置搜索参数
SET hnsw.ef_search = 40;
18. 内网访问测试
从内网其他机器执行:
bash
psql -h 10.0.4.10 -U postgres -d postgres -W
输入密码 root,即可登录。
19. 生产环境安全建议
- 不要用 postgres 做业务操作
- 创建专用业务用户:
sql
CREATE USER myapp WITH PASSWORD 'MyAppPass123';
CREATE DATABASE myappdb OWNER myapp;
- 防火墙控制内网访问
bash
sudo ufw allow from 10.0.0.0/8 to any port 5432
sudo ufw reload
- 不要直接暴露 0.0.0.0 到公网
- 仅内网访问或 VPN
以上就是 Ubuntu 20.04 + PostgreSQL 16 + pgvector + 内网访问 + 密码设置 + 向量表 + HNSW 索引 的完整流程