改? alt=)
Windows 完整跑通 pgvector 向量搜索編譯安裝到首次查詢?nèi)改稀久赓M(fèi)下載鏈接】pgvectorOpen-source vector similarity search for Postgres項(xiàng)目地址: https://gitcode.com/GitHub_Trending/pg/pgvectorpgvector 是 PostgreSQL 的開源向量相似性搜索擴(kuò)展。部署好之后embedding 向量直接存在普通表里建上 HNSW 或 IVFFlat 索引一條 SQL 就能查出最相似的結(jié)果不需要再單獨(dú)維護(hù)一套向量數(shù)據(jù)庫。本文覆蓋 Windows 10/11 上 pgvector 部署的完整流程環(huán)境準(zhǔn)備、nmake 編譯、驗(yàn)收與回歸測(cè)試照著敲一遍就能跑通。先定驗(yàn)收標(biāo)準(zhǔn)兩行 SQL動(dòng)手前先明確目標(biāo)。整個(gè)部署是否成功只看兩句話在 psql 里能否跑通、第二句能否返回版本號(hào)CREATE EXTENSION vector; SELECT vector_version();下面所有內(nèi)容都是圍繞這兩句倒推展開需要什么環(huán)境、敲哪些命令、中途報(bào)錯(cuò)怎么處置。從驗(yàn)收倒推編譯必須齊備的四樣?xùn)|西pgvector 是 C 語言擴(kuò)展在 Windows 上構(gòu)建依賴一套完整的 C 工具鏈加上 PostgreSQL 的開發(fā)文件。開工前逐項(xiàng)對(duì)一下PostgreSQL 14 及以上推薦 16 或 18。編譯要讀它的頭文件include 目錄和庫文件lib 目錄跑回歸測(cè)試時(shí)還要用到它自帶的 pg_regressVisual Studio 2019 及以上安裝時(shí)務(wù)必勾選C 桌面開發(fā)工作負(fù)載漏勾是后面編譯失敗的頭號(hào)原因Windows SDK 10.0.19041 及以上通常隨 VS 工具鏈一起裝別落下Git較新版本即可用于拉取源碼前 3 項(xiàng)屬于硬依賴缺一項(xiàng) nmake 必然報(bào)錯(cuò)Git 只在開頭用一次。Windows 編譯 pgvector 的完整流程第一步拉取源碼cd %TEMP% git clone --branch v0.8.1 https://gitcode.com/GitHub_Trending/pg/pgvector.git cd pgvector源碼放系統(tǒng)臨時(shí)目錄就夠編譯安裝完成后剩下的文件不再礙事。第二步把 PGROOT 指到 PostgreSQL 安裝目錄構(gòu)建腳本 Makefile.win 靠PGROOT這個(gè)環(huán)境變量定位頭文件、庫文件和安裝目標(biāo)沒設(shè)會(huì)直接以PGROOT is not set報(bào)錯(cuò)終止。順手在同一會(huì)話里把 bin 加進(jìn) PATH后面連庫時(shí)能直接敲 psqlset PGROOTC:\Program Files\PostgreSQL\16 set PATH%PGROOT%\bin;%PATH%末尾的 16 按你實(shí)際安裝的版本改。第三步編譯并安裝終端要用 VS 的x64 Native Tools Command Prompt——只有這個(gè) shell 里配好了 SDK 和 64 位編譯器的環(huán)境變量換別的 shell 大概率找不到頭文件。nmake /F Makefile.win nmake /F Makefile.win install第一行把 src/ 下的源碼編譯成vector.dll第二行負(fù)責(zé)落地動(dòng)態(tài)庫拷進(jìn) PGROOT 的lib目錄vector.control 與 sql/ 下的擴(kuò)展腳本放入share\extension。兩行跑完部署就算就位。裝完驗(yàn)證與完整回歸先回到開頭那兩句在任意數(shù)據(jù)庫執(zhí)行CREATE EXTENSION vector; SELECT vector_version();第二句返回你編譯出來的版本號(hào)主流程到此走通。想更穩(wěn)一點(diǎn)再跑一遍完整回歸。它會(huì)把 test/sql/ 下的 14 個(gè)用例全部過一遍覆蓋類型轉(zhuǎn)換、索引構(gòu)建、距離函數(shù)三大塊nmake /F Makefile.win installcheck輸出很長(zhǎng)只看末尾匯總沒有 FAILED 就算通過。編譯報(bào)錯(cuò)的三類高發(fā)問題 ??報(bào)錯(cuò)信息像一張地址單先讀地址再動(dòng)手別盲敲命令。Windows 上的紅屏九成落在下面三種1. 找不到crtdefs.h基本是工具鏈問題用錯(cuò)了終端或 VS 缺C 生成工具組件。先切到 x64 Native Tools Command Prompt 重編仍不行就打開 VS Installer 修復(fù)對(duì)應(yīng)組件。2.PGROOT is not set環(huán)境變量沒設(shè)或設(shè)置后另開了新終端——set只在當(dāng)前會(huì)話生效。在當(dāng)前會(huì)話里重新執(zhí)行一遍set PGROOT...即可。3.C2196 case value already used通常意味著編譯環(huán)境不是 VS 原生環(huán)境編譯器對(duì)常量識(shí)別出了問題。切對(duì)命令行后先清理再重編nmake /F Makefile.win clean nmake /F Makefile.winpgvector 裝好之后的能力速查四種向量類型基本覆蓋所有 embedding 輸出vector單精度浮點(diǎn)HNSW/IVFFlat 索引上限 2,000 維halfvec半精度浮點(diǎn)體積減半索引上限 4,000 維bit二進(jìn)制向量索引上限 64,000 維適合二值量化場(chǎng)景sparsevec稀疏向量只存非零元素專為高維稀疏數(shù)據(jù)設(shè)計(jì)四個(gè)距離算子都能配合索引使用算子含義常見場(chǎng)景-L2歐氏距離通用相似性檢索#內(nèi)積取負(fù)未歸一化向量的檢索余弦距離文本 embedding重方向輕幅度L1 距離強(qiáng)調(diào)稀疏差異的場(chǎng)景兩類索引各有所長(zhǎng)HNSW基于圖結(jié)構(gòu)查詢速度快多數(shù)場(chǎng)景默認(rèn)選它IVFFlat構(gòu)建快、內(nèi)存開銷低適合更看重構(gòu)建時(shí)長(zhǎng)的數(shù)據(jù)量。索引構(gòu)建與查詢調(diào)優(yōu)要點(diǎn)幾條經(jīng)驗(yàn)?zāi)軒湍惚荛_大部分性能坑數(shù)據(jù)灌完再建索引先建索引再插數(shù)據(jù)速度會(huì)差很多調(diào)大maintenance_work_mem它直接決定索引構(gòu)建可用的內(nèi)存預(yù)算大表開并行 worker建索引把多核用起來搜索參數(shù)二選一HNSW 調(diào)ef_searchIVFFlat 調(diào)probes調(diào)高換召回、調(diào)低換速度小表別急著上索引直接順序掃描往往更快也更穩(wěn)pgvector 的 Windows 部署沒有玄學(xué)——設(shè)一個(gè)變量、敲兩行編譯、用兩行 SQL 驗(yàn)收向量搜索就在手邊了下一步建一張表灌入 embedding用ORDER BY embedding - ...跑第一條查詢?cè)囋囀帧!久赓M(fèi)下載鏈接】pgvectorOpen-source vector similarity search for Postgres項(xiàng)目地址: https://gitcode.com/GitHub_Trending/pg/pgvector創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考