centos7安装

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

 


ubuntu安装

 
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
  

 

ubuntu·24安装
``` sudo apt update sudo apt install bison flex libreadline-dev sudo apt install -y libicu-dev pkg-config mkdir -p /opt/app/pg/data mkdir -p /opt/app/pg/walback cd /opt/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 /opt/app/pg/ sudo su - postgres ``` ``` PGHOME=/opt/app/pg PGDATA=$PGHOME/data ARCLOG_PATH=$PGHOME/walback PATH=$PGHOME/bin:$PATH export PGHOME PGDATA ARCLOG_PATH PATH cd /opt/app/pg/ tar -xvf postgresql-17.6.tar.gz cd postgresql-17.6/ ./configure --prefix=/opt/app/pg make make install $ pg_config --version PostgreSQL 17.6 ``` ## 安装pgvector ``` export PG_CONFIG=$PGHOME/bin/pg_config $ echo $PG_CONFIG /opt/app/pg/bin/pg_config # 下载 pgvector 源码 cd /tmp git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git cd pgvector scp pgvector0.8.1.tar.gz xt@39.106.147.125:/tmp/ tar -xvf pgvector0.8.1.tar.gz cd pgvector/ # 3. 编译安装 make PG_CONFIG=/opt/app/pg/bin/pg_config make install PG_CONFIG=/opt/app/pg/bin/pg_config ``` ## 初始化及启动 ``` initdb pg_ctl -D /opt/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 ```
``` $ curl ipinfo.io/ip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 12 100 12 0 0 22 0 --:--:-- --:--:-- --:--:-- 238.147.147.33 sudo -u postgres psql -c "SELECT pg_reload_conf();" ``` - 修改data目录下的pg_hba.conf配置文件,将IPv4 local connections下面的一行改为如下所示: ``` sudo -u postgres psql -c "SHOW hba_file;" cd /opt/app/pg/data/ vim /opt/app/pg/data/pg_hba.conf host all postgres 39.106.147.0/24 scram-sha-256 host all postgres 238.147.147.0/24 scram-sha-256 # 临时测试:允许所有IP连接(仅用于测试!) host all all 0.0.0.0/0 scram-sha-256 host all postgres 0.0.0.0/0 scram-sha-256 vim postgresql.conf listen_addresses='*' port = 5432 max_connections = 30 ``` - 重启PostgreSQL服务: ``` pg_ctl restart pg_ctl stop pg_ctl start ``` - 监听 ``` $ netstat -anp tcp | 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 297011/postgres tcp6 0 0 :::5432 :::* LISTEN 297011/postgres unix 2 [ ACC ] STREAM LISTENING 3288284 297011/postgres /tmp/.s.PGSQL.5432 ``` ## 重启配置 ``` -- 登录后执行 SHOW hba_file; -- 看 pg_hba.conf 路径 SELECT * FROM pg_hba_file_rules; -- 看当前生效的规则 # 方式1:在 psql 里 SELECT pg_reload_conf(); psql -c "SELECT pg_reload_conf();" sudo -u postgres psql -c "SELECT pg_reload_conf();" # TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 md5 # 如果你的 PG 版本默认用 scram,改成: scram-sha-256 ``` 将 `38.147.147.33` 配置为允许整个网段,最常见的写法是 **`38.147.147.0/24`**。 ### 📝 具体配置 在 `pg_hba.conf` 文件中添加: ```conf # 允许 38.147.147.0 - 38.147.147.255 整个网段连接 host all postgres 38.147.147.0/24 scram-sha-256 ``` ### 🔢 CIDR网段对照表 | 你的IP | 配置写法 | 允许范围 | 说明 | | :--- | :--- | :--- | :--- | | `38.147.147.33` | `38.147.147.0/24` | `38.147.147.0` - `38.147.147.255` | **推荐**,覆盖了同一C段的所有IP | | `38.147.147.33` | `38.147.147.32/27` | `38.147.147.32` - `38.147.147.63` | 更精确,只覆盖32个IP | | `38.147.147.33` | `38.147.147.33/32` | 仅 `38.147.147.33` | 精确匹配单个IP(你之前的配置) | | `38.147.147.33` | `38.147.0.0/16` | `38.147.0.0` - `38.147.255.255` | 范围太大,不推荐(安全风险高) | | `38.147.147.33` | `38.0.0.0/8` | `38.0.0.0` - `38.255.255.255` | ⚠️ **极其危险**,相当于向全球开放 | ### ⚠️ 使用 `/24` 网段的风险说明 配置 `38.147.147.0/24` 意味着: - 只要是 `38.147.147.x` 这个范围内的IP,都可以尝试连接你的数据库。 - 这个网段属于美国运营商,可能有大量其他用户也在这个IP段内。 **安全建议**: 1. **如果只是临时测试**,使用 `/24` 可以接受,但测试完成后建议**立即删除或收紧**配置。 2. **如果IP经常变化**,但你确认它总是在 `38.147.147.x` 范围内,使用 `/24` 是个合理的折中方案。 3. 如果你能确定IP变化的范围更小(比如总是在 `38.147.147.32` - `38.147.147.63`),可以使用 `/27` 来缩小范围,更安全。 ### 📌 配置后记得重新加载 ```bash sudo -u postgres psql -c "SELECT pg_reload_conf();" ``` 然后重新测试连接即可。 如果后续发现IP变化到了 `38.147.148.33` 这样的地址,那就需要把网段改成 `38.147.148.0/24` 了。
超简安装·单节点

 

$ 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 需要它 |

 


 


 


 


 


 


参考