1.寶塔安裝pgvector
1.先去github下載pgvectorpgvector/pgvector: Open-source vector similarity search for Postgres
2.把壓縮包上傳到系統文件的/temp下解壓,重命名文件名為pgvector,之后命令操作
cd /tmp
cd pgvector
export PG_CONFIG=/www/server/pgsql/bin/pg_config
export PATH=$PATH:/www/server/pgsql/bin/
make
make install
psql -h localhost -p 5432 -U postgres
CREATE EXTENSION vector
版本:pgsql:16.1 pgvector:0.8
參考博客:寶塔安裝pgvector - 時空云博客(這個博客命令少了一部分,不適用寶塔沒有安裝git的人)
驗證
cd /tmp/pgvector
export PG_CONFIG=/www/server/pgsql/bin/pg_config
export PATH=$PATH:/www/server/pgsql/bin/
psql -h localhost -p 5432 -U postgres
SELECT * FROM pg_extension WHERE extname = 'vector';
2.向量數據庫的創建
建表語句(這個就是spring ai Alibaba的)
CREATE TABLE IF NOT EXISTS public.vector_store (id UUID PRIMARY KEY,content TEXT NOT NULL,metadata JSONB,embedding VECTOR(1536) -- 指定向量維度為 1536
);
要想利用navicat在寶塔上面創建成功必須要進行幾步操作,第一你的數據庫必須有建表權限,你自己創建的數據庫是沒有這個權限的,所以利用寶塔pg管理自帶的數據庫postgres在軟件商店找到那個管理工具進去點擊可以看到postgres的密碼
之后要在客戶端認證上面加入這么一段
host postgres postgres 0.0.0.0/0 md5
在 pg_hba.conf
配置中,規則的字段順序是 type database user address method
。針對你的配置:
host postgres postgres 0.0.0.0/0 md5
- 第一個
postgres
是 數據庫名,表示允許連接到名為postgres
的數據庫。 - 第二個
postgres
是 用戶名,表示允許使用postgres
用戶進行連接。
詳細說明
字段位置 | 含義 | 示例值 | 說明 |
---|---|---|---|
1 | 連接類型 (type ) | host | 表示通過 TCP/IP 進行的非本地連接(區別于 local 表示 Unix 套接字連接)。 |
2 | 數據庫名 (database ) | postgres | 指定允許連接的數據庫名稱。可以是具體數據庫名、all (所有數據庫)、sameuser (與客戶端相同的用戶名)等。 |
3 | 用戶名 (user ) | postgres | 指定允許連接的用戶名。可以是具體用戶名、all (所有用戶),或使用組名(以 + 開頭)。 |
4 | IP 地址段 (address ) | 0.0.0.0/0 | 指定允許連接的客戶端 IP 范圍。0.0.0.0/0 表示所有 IPv4 地址,::/0 表示所有 IPv6 地址。 |
5 | 認證方法 (method ) | md5 | 指定認證方式(如 md5 、password 、trust 、scram-sha-256 等)。 |
常見場景示例
-
允許所有用戶連接所有數據庫:
host all all 0.0.0.0/0 md5
-
僅允許
admin
用戶連接mydb
數據庫:host mydb admin 192.168.1.0/24 md5
-
允許本地用戶通過 Unix 套接字連接所有數據庫:
local all all trust
安全建議
- 生產環境慎用
0.0.0.0/0
:開放所有 IP 可能帶來安全風險,建議使用更嚴格的 IP 范圍(如192.168.1.0/24
)。 - 使用強密碼:配合
md5
或scram-sha-256
認證時,確保用戶密碼足夠復雜。 - 定期審計配置:定期檢查
pg_hba.conf
,移除不必要的開放規則。
3.PostgreSQL缺失hstore擴展
1.檢查
這里依舊要在終端連接到數據庫的超級用戶操作
參考PostgreSQL 缺失hstore擴展|極客教程
SELECT * FROM pg_available_extensions WHERE name = 'hstore';
沒有的話執行下面操作
/q ---退出數據庫連接明確系統版本
cat /etc/redhat-release----安裝
sudo yum install -y postgresql16-contrib---注意查看連接有沒有失效(https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/)
wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgresql16-contrib-16.1-1PGDG.rhel8.x86_64.rpmsudo yum localinstall postgresql16-contrib-16.0-1PGDG.rhel8.x86_64.rpm -y# 復制 hstore 控制文件和腳本到數據庫實際擴展目錄
sudo cp /usr/pgsql-16/share/extension/hstore.control /www/server/pgsql/share/extension/
sudo cp /usr/pgsql-16/share/extension/hstore--*.sql /www/server/pgsql/share/extension/# 復制 hstore 庫文件到數據庫 lib 目錄
sudo cp /usr/pgsql-16/lib/hstore.so /www/server/pgsql/lib/# 登錄數據庫
psql -U postgres -h localhost -p 5432CREATE EXTENSION hstore;
根據您提供的錯誤信息,問題仍然出在 hstore.control
文件的語法格式上。PostgreSQL 對 .control
文件的結構有嚴格要求,特別是版本映射部分。
4.PostgreSQL 無法找到 uuid-ossp 擴展的控制文件
# 檢查系統默認路徑下是否有 uuid-ossp 控制文件
ls /usr/pgsql-16/share/extension/uuid-ossp.control
# 復制 uuid-ossp 控制文件和腳本到數據庫路徑
sudo cp /usr/pgsql-16/share/extension/uuid-ossp.control /www/server/pgsql/share/extension/
sudo cp /usr/pgsql-16/share/extension/uuid-ossp--*.sql /www/server/pgsql/share/extension/# 復制庫文件
sudo cp /usr/pgsql-16/lib/uuid-ossp.so /www/server/pgsql/lib/
sudo systemctl restart postgresql-16.service
psql -U postgres -h localhost -p 5432
CREATE EXTENSION "uuid-ossp"
博主也是狠狠拿下了這個難題太不容易了
問題分析
我實操的一些錯誤,需要可以看看。
如果失敗
ls -l /www/server/pgsql/share/extension/hstore.control ---查看你現有文件或鏈接如果需要重新創建鏈接,可以使用 -f 選項覆蓋現有文件
sudo ln -sf /usr/local/pgsql/contrib/hstore/hstore.control /www/server/pgsql/share/extension/
sudo ln -sf /usr/local/pgsql/contrib/hstore/hstore--1.7--1.8.sql /www/server/pgsql/share/extension/
sudo ln -sf /usr/local/pgsql/contrib/hstore/hstore--1.8.sql /www/server/pgsql/share/extension/確認擴展目錄中的文件完整性
確保所有必要的 hstore 文件都已正確鏈接:
ls -l /www/server/pgsql/share/extension/hstore*錯誤的話刪除
sudo unlink /www/server/pgsql/share/extension/hstore--1.0.sql
sudo unlink /www/server/pgsql/share/extension/hstore--1.7.sql
sudo unlink /www/server/pgsql/share/extension/hstore--unpackaged--1.0.sql
sudo unlink /www/server/pgsql/share/extension/hstore--unpackaged--1.7.sql
sudo unlink /www/server/pgsql/share/extension/hstore--1.8.sql缺少擴展版本
# 創建 hstore--1.8.sql 文件(復制自 1.7 版本)
sudo cp /usr/local/pgsql/contrib/hstore/hstore--1.7.sql \/usr/local/pgsql/contrib/hstore/hstore--1.8.sql# 更新 hstore.control 文件,添加對 1.8 版本的支持
sudo bash -c "cat >> /www/server/pgsql/share/extension/hstore.control" << EOF
1.8 = 'hstore--1.8.sql'
EOF(這里重復定義后面會報錯,去對應的文件夾下/www/server/pgsql/share/extension/將hstore.control文件的重復定義刪除了)
您的文件目前結構可能類似:
# hstore extension
comment = 'data type for storing sets of (key, value) pairs'
default_version = '1.8'
module_pathname = '$libdir/hstore'
relocatable = true
trusted = true# 版本映射(必須放在元數據之后,用空行分隔)
1.8 = 'hstore--1.8.sql' # 第9行(錯誤行)
PostgreSQL 要求版本映射必須滿足以下條件:
- 必須位于所有元數據定義(如
comment
,default_version
)之后 - 必須與前面的內容用空行分隔
- 格式必須嚴格為
版本號 = '腳本文件名'
解決方案
1. 確保版本映射位于文件末尾
修改后的 hstore.control
應如下:
# hstore extension
comment = 'data type for storing sets of (key, value) pairs'
default_version = '1.8'
module_pathname = '$libdir/hstore'
relocatable = true
trusted = true# 版本映射(必須用空行與元數據分隔)
1.0 = 'hstore--1.0.sql' # 如果需要支持舊版本
1.8 = 'hstore--1.8.sql'
2. 驗證文件格式
使用以下命令檢查文件格式是否正確:
# 查看文件內容(包含行號)
cat -n /www/server/pgsql/share/extension/hstore.control
確保:
- 版本映射部分(
1.8 = ...
)前面有一個空行 - 沒有多余的空格或特殊字符
- 等號兩邊有空格(或無空格,但格式統一)
3. 重新創建擴展
修改后,嘗試重新創建擴展:
DROP EXTENSION IF EXISTS hstore;
CREATE EXTENSION hstore;
常見錯誤排查
-
隱藏字符問題:
# 使用 hexdump 查看文件的二進制表示,檢查是否有隱藏字符 hexdump -C /www/server/pgsql/share/extension/hstore.control | head -n 10
確保沒有非預期的字符(如
\r
或其他不可見字符) -
文件編碼問題:
# 檢查文件編碼 file -i /www/server/pgsql/share/extension/hstore.control
確保文件是
utf-8
編碼 -
權限問題:
# 確保文件權限正確 ls -l /www/server/pgsql/share/extension/hstore.control # 輸出應類似:-rw-r--r-- 1 root root ...
如果問題仍然存在,請提供完整的 hstore.control
文件內容(包括行號),以便進一步診斷。
看起來 PostgreSQL 官方倉庫的路徑發生了變化,導致直接訪問 RHEL 8 的倉庫鏈接失敗。以下是最新的解決方案,通過手動配置倉庫文件來解決這個問題:
根據您的錯誤信息,系統中存在多個重復的 PostgreSQL 倉庫配置,并且錯誤地引入了 RHEL 3 的倉庫(這是一個非常古老的版本,與您的系統不兼容)。以下是解決步驟:
解決方案
1. 刪除所有 PostgreSQL 倉庫配置
sudo rm -f /etc/yum.repos.d/pgdg*.repo
2. 創建正確的 PostgreSQL 16 倉庫配置
sudo vi /etc/yum.repos.d/pgdg.repo
添加以下內容(僅保留必要的倉庫,避免重復):
[pgdg16]
name=PostgreSQL 16 for RHEL 8/CentOS 8 - x86_64
baseurl=https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-16[pgdg-common]
name=PostgreSQL common RPMs for RHEL 8/CentOS 8 - x86_64
baseurl=https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-8-$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG
3. 清理緩存并驗證倉庫
# 清除舊緩存
sudo yum clean all
sudo rm -rf /var/cache/yum# 驗證倉庫列表(確保沒有重復或錯誤的倉庫)
sudo yum repolist
預期輸出(應只包含 pgdg16
和 pgdg-common
,且無 RHEL 3 相關倉庫):
repo id repo name
alinux3-os Alibaba Cloud Linux 3 - OS
alinux3-updates Alibaba Cloud Linux 3 - Updates
...
pgdg16 PostgreSQL 16 for RHEL 8/CentOS 8 - x86_64
pgdg-common PostgreSQL common RPMs for RHEL 8/CentOS 8 - x86_64
4. 安裝 PostgreSQL 16 擴展包
sudo yum install postgresql16-contrib
5. 驗證 hstore 擴展文件
# 檢查 hstore.so 是否存在
ls /usr/pgsql-16/lib/hstore.so# 檢查控制文件是否存在
ls /usr/pgsql-16/share/extension/hstore.control
6. 修復符號鏈接
# 刪除舊的符號鏈接
sudo rm -f /www/server/pgsql/share/extension/hstore*# 創建新的符號鏈接
sudo ln -s /usr/pgsql-16/share/extension/hstore.control /www/server/pgsql/share/extension/
sudo ln -s /usr/pgsql-16/share/extension/hstore--1.8.sql /www/server/pgsql/share/extension/
sudo ln -s /usr/pgsql-16/lib/hstore.so /www/server/pgsql/lib/
7. 重啟 PostgreSQL 并驗證擴展
sudo systemctl restart postgresql
psql -U postgres -c "CREATE EXTENSION hstore;"
關鍵說明
- 重復倉庫問題:之前的操作可能多次添加了相同的倉庫,導致
yum
報錯。 - RHEL 3 倉庫錯誤:系統錯誤地嘗試訪問 RHEL 3 的倉庫,這是由于倉庫配置中的版本變量(如
$releasever
)被錯誤解析為3
。 - 手動指定 RHEL 8:通過在倉庫配置中直接使用
rhel-8
,避免系統自動識別版本導致的錯誤。
如果問題仍然存在,請提供 yum repolist
和 ls -l /usr/pgsql-16/lib/hstore.so
的輸出結果,以便進一步診斷。