1. 寶塔安裝
- 首先確保你的寶塔已經安裝了 PostgreSQL。
安裝好后是能看到上面這個界面的。
我安裝的是 16.1 版本,下面的教程講的也是 16.1 版本的。
2.開放防火墻的端口號 5432
3.允許外部訪問所有數據庫
4.設置超級管理員用戶密碼
用戶名默認為:postgres
后續連接數據庫可用超級用戶連接
username:postgres
password:就是你剛剛設置的
2. 安裝 pgvector 插件
2.1 查看安裝狀態
1. 首先去到控制臺,輸入命令連接 postgreSQL 數據庫。
/www/server/pgsql/bin/psql -U postgres -h localhost -p 5432
顯示 postgres=# 就是連接上了數據庫,可以敲 sql 語句了。
2. 在psql命令行中,執行創建擴展的命令:
CREATE EXTENSION vector;
如果沒有安裝過插件就會報錯。
3.驗證是否安裝成功:
\dx vector
如果成功,它會列出 vector 擴展的信息。如下圖:
2.2 安裝pgvector
下載pgvector插件:
下載地址: https://github.com/pgvector/pgvector/archive/refs/tags/v0.7.4.zip
postgresql14 對應 pgvector0.5 的版本
postgresql15 對應 pgvector0.6 的版本
postgresql15 對應 pgvector0.7 的版本
將壓縮包本地解壓好,去寶塔建個文件夾,直接把文件都傳進去。
2.3 編譯安裝
進入剛剛上傳文件夾的目錄,準備編譯安裝。
# 進入你的 pgvector 源代碼目錄
cd /www/wwwroot/pgvector# 清理之前的編譯嘗試(可選,但推薦)
make clean# 使用找到的 pg_config 路徑進行編譯
make PG_CONFIG=/www/server/pgsql/bin/pg_config# 安裝編譯好的擴展(需要 root 權限)
sudo make install PG_CONFIG=/www/server/pgsql/bin/pg_config
然后重復 2.1 查看安裝狀態,查看是否安裝成功。
2.4 設置環境變量 (建議設置)
1.找到PostgreSQL的可執行工具路徑
我的 PostgreSQL 安裝目錄是/www/server/pgsql。這個目錄下的 bin 子目錄包含了所有 PostgreSQL的命令行工具,包括 psql (PostgreSQL 交互終端)和 pg-ctl (服務控制工具)。
重要工具路徑:
psql:/www/server/pgsql/bin/psql(用于連接數據庫和執行 SQL 命令)
pg-ctl:/www/server/pgsql/bin/pg-ctl(用于管理PostgreSQL 服務,如啟動、停止)
檢查工具是否存在:
ls -la /www/server/pgsql/bin/psql
ls -la /www/server/pgsql/bin/pg-ctl
如果這些文件存在(應該有可執行權限),你就可以使用它們了。
2.設置環境變量
為了方便使用,建議將 PostgreSQL 的 bin目錄添加到你的 PATH 環境變量中。這樣你就可以直接在命令行中輸入 psql、pg-ctl 等命令,而不需要每次都輸入完整路徑。
#臨時添加(當前終端會話有效):
export PATH=/www/server/pgsql/bin:$PATH#永久添加(推薦):
#將上面的export 命令添加到你的 shell配置文件中(如~/.bashrc 或~/.bash_profile):
echo 'export PATH=/www/server/pgsql/bin:$PATH' >> ~/.bashrc
Source ~/.bashrc#驗證路徑是否設置成功:
which psql
# 應該輸出: /www/server/pgsql/bin/psql
3.使用psql 連接到 PostgreSQL 數據庫
psql 是 PostgreSQL 的交互式終端程序,允許執行 SQL 命令和管理數據庫。
以postgres用戶連接到數據庫:
#使用完整路徑(如果未設置PATH)
/www/server/pgsql/bin/psql -U postgres -h localhost -p 5432#或者如果已設置PATH
psql -U postgres -h localhost -p 5432
說明:
- -U postgres:指定用戶名(PostgreSQL 的默認超級用戶通常叫postgres)
- -h localhost:指定主機 (這里連接本地數據庫)
- -p 5432:指定端口(PostgreSQL 默認端口是54321,如果你的配置不同請修改)
如果連接失敗:
- 權限問題:檢查/www/server/pgsql/data/pg_hba.conf 文件,確保有允許 postgres 用戶從本地連接的配置。
- 端口問題:確認你的 PostgreSQL 實際監聽端口
(檢查/www/server/pgsql/data/postgresql.conf 中的 port 設置)。
4.在數據庫中啟用pgvector擴展
成功連接to PostgreSQL 后,你會看到提示符變為postgres=#,這表示你現在可以執行 SQL 命令。
創建并啟用擴展:
-- 啟用 vector 擴展
CREATE EXTENSION vector;-- 驗證擴展是否安裝成功
\dx vector
3.解決PostgreSQL中“vector"類型不存在的問題
問題原因分析
擴展已安裝但未啟用:PostgreSQL 擴展需要在每個要使用它的數據庫中單獨創建。即使服務器層面安裝了 pgvector,不執行 CREATE EXTENSION 命令,當前數據庫也無法識別vector 數據類型。
權限問題:當前數據庫用戶可能沒有創建擴展的權限。
搜索路徑問題:擴展可能安裝在了非默認模式(schema)下,而該模式不在你的search_path中。
解決方法:
步驟1:連接到你的數據庫并創建擴展
使用有權限的用戶(如postgres或具有超級用戶權限的用戶)連接到你需要使用vector 數據類型的數據庫,然后執行以下 SQL 命令:
-- 連接到你的數據庫后,執行以下命令創建擴展
CREATE EXTENSION IF NOT EXISTS vector;
步驟2:驗證擴展是否創建成功
創建擴展后,可以通過以下命令驗證是否成功:
-- 查看當前數據庫已安裝的擴展列表,檢查 vector 是否在列
\dx-- 或者查詢擴展詳情
SELECT * FROM pg_extension WHERE extname = 'vector';
4.解決 Spring AI PgVectorStore 的 hstore 擴展問題
錯誤信息顯示:
ERROR: extension "hstore" is not available
詳細:Could not open extension control file "/www/server/pgsql/share/extension/hstore.control": No such file or directory.
建議:The extension must first be installed on the system where PostgreSQL is running.
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore</font>
是 PostgreSQL 的一個擴展,用于存儲鍵值對數據。Spring AI 的 PgVectorStore 依賴這個擴展來存儲元數據。
安裝 hstore 擴展
安裝 PostgreSQL contrib 包(包含 hstore 擴展):
指定版本(假設你使用的是 PostgreSQL 16)
sudo yum install postgresql16-contrib
讓 PostgreSQL 找到 hstore 擴展
手動將 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">contrib</font>
包提供的擴展文件復制或鏈接到 PostgreSQL 的搜索路徑中。
步驟 1: 查找 hstore 擴展文件的位置
首先,我們需要找到 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">postgresql16-contrib</font>
包安裝后,<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore</font>
擴展文件實際存放的位置。
使用 find 命令搜索:
在終端中執行以下命令,搜索 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore.control</font>
文件:
- bashsudo find / -name “hstore.control” 2>/dev/null
或者更精確地搜索 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">contrib</font>
相關的目錄:
- bashsudo find /usr -path “/contrib/” -name “hstore.control” 2>/dev/null
- 檢查常見的安裝路徑:
根據 OpenCloudOS 和 PostgreSQL 的常見安裝路徑,<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore.control</font>
文件很可能在以下位置之一:<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/share/pgsql/extension/hstore.control</font>
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/share/postgresql16/extension/hstore.control</font>
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/pgsql-16/share/extension/hstore.control</font>
步驟 2: 將擴展文件鏈接到 PostgreSQL 目錄
找到 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore.control</font>
文件及其同目錄下的相關文件(通常是 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">.sql</font>
和 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">.so</font>
文件)后,您有兩種方法讓 PostgreSQL 找到它們:
創建符號鏈接(推薦,更靈活)
假設您找到的路徑是 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/share/pgsql/extension/hstore.control</font>
:
# 創建擴展目錄(如果不存在)
sudo mkdir -p /www/server/pgsql/share/extension/# 為 hstore.control 創建符號鏈接
sudo ln -s /usr/share/pgsql/extension/hstore.control /www/server/pgsql/share/extension/hstore.control# 為 hstore--1.x.sql 文件創建符號鏈接(請替換 x 為實際版本號,或用通配符)
sudo ln -s /usr/share/pgsql/extension/hstore--1*.sql /www/server/pgsql/share/extension/# 為 hstore.so 共享庫創建符號鏈接(庫文件可能在 lib 目錄下)
# 先找到 hstore.so 文件
sudo find / -name "hstore.so" 2>/dev/null
# 假設找到的路徑是 /usr/lib64/pgsql/hstore.so
sudo ln -s /usr/lib64/pgsql/hstore.so /www/server/pgsql/lib/hstore.so
步驟 3: 設置文件權限
確保 PostgreSQL 用戶(通常是 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">postgres</font>
)有權限讀取這些文件:
bash
sudo chown postgres:postgres /www/server/pgsql/share/extension/hstore.*
sudo chmod 644 /www/server/pgsql/share/extension/hstore.*
sudo chown postgres:postgres /www/server/pgsql/lib/hstore.so
sudo chmod 755 /www/server/pgsql/lib/hstore.so
步驟 4: 重啟 PostgreSQL 服務并啟用擴展
完成文件鏈接或復制后,重啟 PostgreSQL 服務以使更改生效,然后啟用擴展:
先手動去寶塔面板重啟 PostgreSQL 服務
# 連接到 PostgreSQL
psql -U postgres -h localhost# 在 psql 中創建擴展
CREATE EXTENSION hstore;# 驗證擴展是否安裝成功
\dx hstore
最后確認一下 PostgreSQL 配置文件有沒有問題:
5.PostgreSQL 數據庫中缺少 uuid-ossp 擴展
- 創建符號鏈接
# 為擴展控制文件和SQL文件創建符號鏈接
sudo ln -s /usr/share/pgsql/extension/uuid-ossp.control /www/server/pgsql/share/extension/
sudo ln -s /usr/share/pgsql/extension/uuid-ossp--1.0--1.1.sql /www/server/pgsql/share/extension/
sudo ln -s /usr/share/pgsql/extension/uuid-ossp--1.1.sql /www/server/pgsql/share/extension/# 為共享庫文件創建符號鏈接
sudo ln -s /usr/lib64/pgsql/uuid-ossp.so /www/server/pgsql/lib/
- 驗證符號鏈接:
ls -la /www/server/pgsql/share/extension/uuid-ossp*
ls -la /www/server/pgsql/lib/uuid-ossp.so
3.重啟 PostgreSQL 服務(手動)
4.在 PostgreSQL 中創建擴展
CREATE EXTENSION "uuid-ossp";