|
centos7环境准备
docker run -itd --name pg5 -h pg5 --net mydk --ip 192.168.73.115 -v /opt:/opt/ -v /tmp:/tmp cent7 bash
docker exec -it pg5 bash
docker run -itd --name pg6 -h pg6 --net mydk --ip 192.168.73.116 -v /opt:/opt/ -v /tmp:/tmp cent7 bash
docker exec -it pg6 bash
yum install -y net-tools libaio numactl
依赖包检查
rpm -qa | grep readline-devel
rpm -qa | grep zlib-devel
yum search readline-devel
# 这个目录有讲究,如果出现命令执行完但软件包没下载的情况,就换/tmp目录试试
mkdir -p /tmp/rpm
yum install --downloadonly --downloaddir=/tmp/rpm readline-devel.x86_64
yum install --downloadonly --downloaddir=/tmp/rpm zlib-devel
rpm -Uvh --force --nodeps *.rpm
安装
目录准备
mkdir -p /opt/app/pg/
cd /opt/soft/pg
tar -xvf postgresql-12.13.tar.gz
./configure --prefix=/opt/app/pg
make
make install
创建用户及存储数据的目录,配置环境变量
adduser postgres
mkdir -p /opt/app/pg/data
mkdir -p /opt/app/pg/walback
chown -R postgres /opt/app/pg/data
su - postgres
PGHOME=/opt/app/pg
PGDATA=$PGHOME/data
ARCLOG_PATH=$PGHOME/walback
PATH=$PGHOME/bin:$PATH
export PGHOME PGDATA ARCLOG_PATH PATH
初始化及启动
```
initdb
pg_ctl start
psql -U postgres
postgres=# \password
Enter new password for user "postgres":Book_1234
Enter it again:
postgres-# \q
```
设置监听
修改data目录下的pg_hba.conf配置文件,将IPv4 local connections下面的一行改为如下所示:
```sh
# IPv4 local connections:
host all all 0.0.0.0/0 trust
```
postgresql.conf配置文件
```sh
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 300 # (change requires restart)
```
重启PostgreSQL服务:
pg_ctl restart
pg_ctl stop
pg_ctl start
测试表
```
createuser tpf -h 127.0.0.1 -p 5432 -c 30 -s --replication -d -l -r -P
测试表
CREATE TABLE t_sample AS
SELECT a1::int
FROM generate_series(1, 100) AS a1;
ALTER TABLE t_sample ADD COLUMN a2 int;
ALTER TABLE t_sample ADD COLUMN a3 int DEFAULT 10;
ALTER TABLE t_sample ADD COLUMN a4 text DEFAULT 'weixiao';
ALTER TABLE t_sample ADD COLUMN a5 int DEFAULT random()*1000;
alter table t_sample alter COLUMN a1 type bigint;
```
|
```
mkdir -p /ai/app/
mv pgv1.tar.gz /ai/app/
cd /ai/app/
tar -xvf pgv1.tar.gz
cd pg/rpm
rpm -Uvh --force --nodeps *.rpm
adduser postgres
chown -R postgres /ai/app/pg/
su - postgres
cd
vim .bash_profile
export PGHOME=/ai/app/pg
export PGDATA=$PGHOME/data
export ARCLOG_PATH=$PGHOME/walback
export PATH=$PGHOME/bin:$PATH
source .bash_profile
重启PostgreSQL服务:
pg_ctl start
```
|
17 降低了内存使用 15是当前(2022年)新出的版本,对大数据的支持比较强 13-14主要实现了分区表的功能 12 版本相对之前的版本是一个大的跨越 |
```
psql -U postgres -d testdb
-- 创建含向量列的表
CREATE TABLE items (
id bigserial PRIMARY KEY,
embedding vector(3) -- 3维向量,根据你的模型调整维度
);
-- 插入向量数据
INSERT INTO items (embedding) VALUES
('[1,2,3]'),
('[4,5,6]'),
('[7,8,9]');
-- 向量相似度搜索(欧氏距离)
SELECT * FROM items
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
-- 创建 IVFFlat 索引加速搜索(推荐数据量 > 1000 时)
CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);
-- 或使用 HNSW 索引(更快但占用更多内存)
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);
```
pg_ctl stop
|
|
|
https://ftp.postgresql.org/pub/source/
https://ftp.postgresql.org/pub/source/v17.6/postgresql-17.6.tar.gz
准备
```
sudo apt update
sudo apt install bison flex libreadline-dev
```
```
sudo su - root
mkdir -p /ai/app/pg/
rsync -rltDv /mnt/g/soft/pub_source_v17.6_postgresql-17.6.tar.gz /ai/app/pg/
adduser postgres
chown -R postgres /ai/app/pg/
su - postgres
cd /ai/app/pg/
mkdir -p /ai/app/pg/data
mkdir -p /ai/app/pg/walback
PGHOME=/ai/app/pg
PGDATA=$PGHOME/data
ARCLOG_PATH=$PGHOME/walback
PATH=$PGHOME/bin:$PATH
export PGHOME PGDATA ARCLOG_PATH PATH
```
安装
postgres@ii:/ai/app/pg$ tar -xvf pub_source_v17.6_postgresql-17.6.tar.gz
```
cd postgresql-17.6/
./configure --prefix=/ai/app/pg
make
make install
```
初始化及启动
```
initdb
pg_ctl -D /ai/app/pg/data -l logfile start
pg_ctl start
psql -U postgres
postgres=# \password
Enter new password for user "postgres":Book_1234
Enter it again:
postgres-# \q
```
|
|
postgresql.conf配置文件 - 修改data目录下的pg_hba.conf配置文件,将IPv4 local connections下面的一行改为如下所示: ``` cd /ai/app/pg/data vim postgresql.conf listen_addresses='*' port = 5432 max_connections = 30 ``` 重启PostgreSQL服务:
pg_ctl restart
pg_ctl stop
pg_ctl start
监听
```
postgres@ii:/ai/app/pg/data$ netstat -tunlp|grep 5432
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 12954/postgres
tcp6 0 0 :::5432 :::* LISTEN 12954/postgres
```
|
``` # 1. 先安装 PostgreSQL sudo apt update sudo apt install postgresql postgresql-contrib -y sudo systemctl start postgresql # 2. 再安装 pgvector 扩展包 sudo apt install postgresql-16-pgvector # 根据你的PG版本调整 ``` |
``` sudo apt update sudo apt install bison flex libreadline-dev sudo apt install -y libicu-dev pkg-config mkdir -p /wks/app/pg/data mkdir -p /wks/app/pg/walback cd /wks/app/pg wget https://ftp.postgresql.org/pub/source/v17.6/postgresql-17.6.tar.gz $ ls data postgresql-17.6.tar.gz walback sudo adduser postgres sudo chown -R postgres /wks/app/pg/ sudo su - postgres ``` ``` PGHOME=/wks/app/pg PGDATA=$PGHOME/data ARCLOG_PATH=$PGHOME/walback PATH=$PGHOME/bin:$PATH export PGHOME PGDATA ARCLOG_PATH PATH ``` ``` cd /wks/app/pg/ tar -xvf postgresql-17.6.tar.gz cd postgresql-17.6/ ./configure --prefix=/wks/app/pg make make install $ pg_config --version PostgreSQL 17.6 ``` |
|
| 场景 | 大概内存需求 |
| -------------- | ------------- |
| **默认启动** | ~256MB 可用即可运行 |
| **开发环境** | 建议 1-2GB |
| **生产环境(小负载)** | 4GB+ |
| **生产环境(中高负载)** | 16GB+,且需专业调优 |
|
``` # 先确保 PostgreSQL 已安装并运行 pg_config --version # 验证PG安装 使用 make 和 sudo make install 安装 pgvector 时,它会自动安装到你当前系统中默认的 PostgreSQL 安装目录中。 具体来说: make:编译源代码。 sudo make install:将编译好的文件(.so 库文件和 .sql 脚本)复制到 PostgreSQL 的共享目录和库目录。 SQL 文件通常去:$PGSHARE/extension/ (例如 /usr/share/postgresql/15/extension/) 库文件通常去:$PG_LIBDIR/ (例如 /usr/lib/postgresql/15/lib/) 这些路径是在你编译 pgvector 时,通过读取你系统中 pg_config 工具的输出来确定的。 pg_config 告诉编译器你的 PostgreSQL 装在哪里。 ``` ``` export PATH=/wks/app/pg/bin:$PATH export PG_CONFIG=/wks/app/pg/bin/pg_config $ echo $PG_CONFIG /wks/app/pg/bin/pg_config ```
```
# 2. 下载 pgvector 源码
cd /tmp
git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git
cd pgvector
# 3. 编译安装
make
sudo make install
# 或者指定 PostgreSQL 路径(如果你是从源码安装的 PG)
make PG_CONFIG=/wks/app/pg/bin/pg_config
sudo make install PG_CONFIG=/wks/app/pg/bin/pg_config
```
$ psql -U postgres
psql (17.6)
Type "help" for help.
postgres=# create database testdb;
# 1. 连接到 PostgreSQL
psql -U postgres -d testdb
# 2. 在数据库中创建扩展
CREATE EXTENSION vector;
# 3. 验证安装
SELECT * FROM pg_extension WHERE extname = 'vector';
SELECT vector_dims('[1,2,3]'::vector); -- 应返回 3
|
|
|
$ cat /etc/os-release |grep Ub NAME="Ubuntu" PRETTY_NAME="Ubuntu 20.04 LTS" # 已包含vector rsync -e 'ssh -p26225' -rltDv /mnt/d/tmp/pg17_u20.tar.gz xt@144.34.185.72:/wks/app/pg/ sudo adduser postgres cd /wks/app tar -xvf pg17_u20.tar.gz sudo chown -R postgres:postgres /wks/app/pg sudo su - postgres PGHOME=/wks/app/pg PGDATA=$PGHOME/data ARCLOG_PATH=$PGHOME/walback PG_CONFIG=$PGHOME/bin/pg_config PATH=$PGHOME/bin:$PATH export PGHOME PGDATA ARCLOG_PATH PATH PG_CONFIG
initdb #仅首次
pg_ctl -D /wks/app/pg/data -l logfile start
pg_ctl start
psql -U postgres
postgres=# \password
Enter new password for user "postgres":Book_1234
Enter it again:
postgres-# \q
pg_ctl stop
-- 插件验证
SELECT * FROM pg_extension WHERE extname = 'vector';
SELECT vector_dims('[1,2,3]'::vector); -- 应返回 3
-- 如果没有则进行安装
rsync -rltDv pgvector0.8.1.tar.gz /wks/app/pg/
cd /wks/app/pg/
tar -xvf pgvector0.8.1.tar.gz
cd /wks/app/pg/pgvector
make clean # 如果曾经编译过会出现 Nothing to be done for 'all'.
make
make install
1. 连接到 对应的数据库
psql -U postgres -d testdb
2. 在数据库中创建扩展
CREATE EXTENSION vector;
|
```
(base) xt@VM-8-13-ubuntu:~$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
(base) xt@VM-8-13-ubuntu:~$ ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.7) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
(base) xt@VM-8-13-ubuntu:~$ uname
Linux
(base) xt@VM-8-13-ubuntu:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
```
|
initdb pg_ctl -D /wks/app/pg/data -l logfile start psql -U postgres postgres=# \password Enter new password for user "postgres":Book_1234 Enter it again: postgres-# \q |
┌─────────────────────────────────────────┐ │ 你的应用程序 │ │ (PostgreSQL / initdb) │ ├─────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ │ │ │ libicu │◄───│ libstdc++ │ │ │ │ (ICU 库) │ │ (GCC C++库) │ │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ │ │ └────────┬─────────┘ │ │ ▼ │ │ ┌─────────────┐ │ │ │ glibc │ │ │ │(C运行时库) │ │ │ └─────────────┘ │ └─────────────────────────────────────────┘
| 组件 | 关系 | 作用 |
| ------------- | ------------------ | -------------------- |
| **libicu** | 独立库,但**编译时需要 gcc** | 提供 Unicode 和国际化支持 |
| **gcc** | 编译工具链 | 编译 libicu 和依赖它的程序 |
| **glibc** | 底层 C 运行时 | libicu 运行时依赖 glibc |
| **libstdc++** | GCC 的 C++ 标准库 | libicu 的 C++ API 需要它 |
|
|
|
|
|
|
|
|
|