我确实尝试了 Google 和 stackoverflow 上所有前 20 个解决方案,但我无法让我的 postgres 17 安装名为“pgvector”的扩展。当我输入“make”或“cl”时,我可以看到它们已添加到我的路径中,并且终端输入能够打开这些 exe 文件。我甚至按照 AI 的建议安装了 WSL。我在我的文档文件夹中克隆了 pgvector 的存储库,当我使用 Powershell 命令(admin)到达那里并运行命令 make 时,我收到此错误
C:\Users\rohit\Documents\Coding\pgvector>make cl -Wall -O2 /wd4018 /wd4244 /wd4273 /wd4101 /wd4102 /wd4090 /wd4267 -march=native -ftree-vectorize -fassociative-math -fno-signed-zeros -fno-trapping-math -I. -I./ -IC:/PROGRA~1/PostgreSQL/17/include/server -IC:/PROGRA~1/PostgreSQL/17/include/internal /DWIN32 /DWINDOWS /D__WINDOWS__ /D__WIN32__ /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE -IC:/PROGRA~1/PostgreSQL/17/include/server/port/win32 -DWIN32_STACK_RLIMIT=4194304 -c -o src/bitutils.o src/bitutils.c Microsoft (R) C/C++ 优化编译器版本 19.29.30157 for x86 版权所有 (C) Microsoft Corporation。保留所有权利。
trapping-math' bitutils.c C:\Program Files\PostgreSQL\17\include\server\ch(75): 致命错误 C1083: 无法打开包含文件:“libintl.h”: 没有此文件或目录 make: *** [: src/bitutils.o] 错误 2
有人知道我能做什么吗?我甚至尝试使用 docker 镜像方法,即使在运行该 docker 镜像的情况下,当我运行 make 命令时仍然会出现类似的错误。
我已经安装了 VS Studio 代码,并且我的系统上也安装了 C++ 工具。
我也尝试过使用这个命令:
“C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat” x64
但我的系统没有那个 VC 和更高版本的文件夹。我应该重新安装我的 postgres 17 还是重新安装 vs studio 代码?
我相信我的所有路径都已修复,因为不再出现诸如未找到 cl.exe 或未找到 make 之类的错误。
如果我进入 psql 并运行
错误:扩展“pgvector”不可用 详细信息:无法打开扩展控制文件“C:/Program Files/PostgreSQL/17/share/extension/pgvector.control”:没有此文件或目录。提示:必须先在运行 PostgreSQL 的系统上安装扩展。
奇怪的是,我可以看到我的系统在与上述错误所提示的同一目录中有一个名为 ch 的文件。我在杀毒软件上查看是否有权限错误,但实际上没有。
按照 repos 的确切文档,我能够运行命令
cd "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build" 然后我收到一条消息 [vcvarsall.bat] 环境已初始化为: 'x64'
此后,当我为 pgvector 克隆一个新的 repo 时,我收到这个新错误:
C:\Users\rohit\AppData\Local\Temp\pgvector>nmake /F Makefile.win 安装
Microsoft (R) 程序维护实用程序版本 14.43.34808.0 版权所有 (C) Microsoft Corporation。保留所有权利。
copy vector.dll "C:\Program Files\PostgreSQL\17\lib" Access is denied. 0 file(s) copied. NMAKE : fatal error U1077: 'copy vector.dll "C:\Program Files\PostgreSQL\17\lib"' : return code '0x1' Stop.
请注意,我在 Powershell 上以管理员身份运行,甚至在 MS VS 代码启动选项终端上运行了这些命令。
从运行 nmake 后的终端输出中可以看到,它确实显示已安装。它甚至显示我安装了数百个名为 pgvector 的文件,但当我重新启动 postgres 服务并查看我的 postgres 是否有名为 pgvector 的扩展名时,它只是说找不到任何东西
按照说明,在克隆pgvector repo后,我还能够运行 nmake 命令,它甚至显示它已正确安装(我假设?)但在重新启动 postgres 服务或整个系统后,在 psql 中我仍然无法使用该扩展
C:\pgvector>nmake /F Makefile.win install Microsoft (R) 程序维护实用程序版本 14.43.34808.0 版权所有 (C) Microsoft Corporation。保留所有权利。
cl /nologo /I"C:\Program Files\PostgreSQL\17\include\server\port\win32_msvc" /I"C:\Program
Files\PostgreSQL\17\include\server\port\win32" /I"C:\Program Files\PostgreSQL\17\include\server" /I"C:\Program Files\PostgreSQL\17\include" /O2 /fp:fast /c src\hnsw.c /Fosrc\hnsw.obj hnsw.c C:\Program Files\PostgreSQL\17\include\server\access/tupmacs.h(65): 错误 C2196: 案例值‘4’已经使用 C:\Program Files\PostgreSQL\17\include\server\access/tupmacs.h(197): 错误 C2196: 案例值‘4’已经使用 NMAKE: 致命错误 U1077: ‘cl /nologo /I"C:\Program Files\PostgreSQL\17\include\server\port\win32_msvc" /I"C:\Program Files\PostgreSQL\17\include\server\port\win32" /I“C:\Program Files\PostgreSQL\17\include\server” /I“C:\Program Files\PostgreSQL\17\include” /O2 /fp:fast /c src\hnsw.c /Fosrc\hnsw.obj':返回代码“0x2”停止。
另外,在 Windows 系统上安装一个简单的 Postgres 扩展真的这么难吗?所有 Unix 或 Mac 系统都可以使用任何包管理器,但 Windows 用户被迫通过 VS Studio 安装,而我仍然在这方面停留了整整两天。
做 Unix 的事情,使用包管理器
将整个依赖管理工作转移到包管理器可以避免大多数这些问题,就像您自己指出的那样:
VS Studio 中有一个包管理器。PostgreSQL还正式推荐EnterpriseDB 的专用包管理器StackBuilder。该
pgvector
模块列在其支持的非贡献中:您只需勾选一个框并让它自行经历.DLL 地狱即可。
pgvector
其中添加了内容,那么它可能已经成功了。pg_vector
readme.md 提到可以将其指向正确的版本。如果那只是您的本地开发环境,您可以获取pg_dump
数据库的内容并重新安装一个。根据这篇文章,
libintl.h
它可能是GNU C 库的一部分。尝试安装它。他们还提到
gettext
,所以你可以尝试一下。