PostgreSQL 16 + pgvector 完整安装和内网访问指南(Ubuntu 20.04)

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. 生产环境安全建议

  1. 不要用 postgres 做业务操作
    • 创建专用业务用户:
sql 复制代码
CREATE USER myapp WITH PASSWORD 'MyAppPass123';
CREATE DATABASE myappdb OWNER myapp;
  1. 防火墙控制内网访问
bash 复制代码
sudo ufw allow from 10.0.0.0/8 to any port 5432
sudo ufw reload
  1. 不要直接暴露 0.0.0.0 到公网
    • 仅内网访问或 VPN

以上就是 Ubuntu 20.04 + PostgreSQL 16 + pgvector + 内网访问 + 密码设置 + 向量表 + HNSW 索引 的完整流程

相关推荐
清水白石0089 分钟前
解构异步编程的两种哲学:从 asyncio 到 Trio,理解 Nursery 的魔力
运维·服务器·数据库·python
资生算法程序员_畅想家_剑魔11 分钟前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
PyHaVolask37 分钟前
SQL注入漏洞原理
数据库·sql
ptc学习者1 小时前
黑格尔时代后崩解的辩证法
数据库
代码游侠1 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
!chen1 小时前
EF Core自定义映射PostgreSQL原生函数
数据库·postgresql
霖霖总总1 小时前
[小技巧14]MySQL 8.0 系统变量设置全解析:SET GLOBAL、SET PERSIST 与 SET PERSIST_ONLY 的区别与应用
数据库·mysql
马克学长1 小时前
SSM校园食堂订餐系统531p9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·ssm 校园食堂订餐系统
alonewolf_991 小时前
深入剖析MySQL索引底层:B+树、联合索引与跳跃扫描原理全解
数据库·b树·mysql
oMcLin1 小时前
如何在 AlmaLinux 9 上配置并优化 Redis 集群,支持高并发的实时数据缓存与快速查询?
数据库·redis·缓存