MSYS2环境编译PostgreSQL执行make报lwlocknames.txt解析错误如何解决
报错原因
你遇到的报错是generate-lwlocknames.pl脚本校验lwlocknames.txt格式失败触发的,脚本要求非注释、非空行的内容必须严格匹配[字母/数字/下划线] [数字]的正则格式,报错指向文件第8行不符合规则,常见触发场景有三个:
- 源码包损坏,
lwlocknames.txt第8行出现格式异常,比如存在多余特殊字符、空格、缩进错误 - 手动修改源码时误改了
lwlocknames.txt的内容 - MSYS2环境下Windows换行符(CRLF)和Linux换行符(LF)不兼容,脚本执行
chomp时仅移除了末尾的LF,残留的不可见CR字符导致正则匹配失败
修复方案
- 先检查
lwlocknames.txt内容:打开源码路径下的/c/builds/source/src/backend/storage/lmgr/lwlocknames.txt,查看第8行,PostgreSQL 11.8官方版本该位置的内容为WALWriteLock 4,如果内容不符直接修正即可,确保非注释行都是锁名称 数字的格式,无多余字符。 - 若内容正常,大概率是换行符兼容问题,在MINGW64 shell中执行命令
dos2unix /c/builds/source/src/backend/storage/lmgr/lwlocknames.txt将文件换行符转换为LF格式,再重新执行make即可。 - 若以上操作无效,先执行
make clean清理之前的编译缓存,再重新编译;如果还是报错,直接下载官方干净的PostgreSQL 11.8源码包重新解压编译,避免未知改动导致的问题。 - 如果你编译的目的只是获取Windows环境下编译PostgreSQL扩展所需的依赖,完全不需要自行编译整个PostgreSQL,直接下载PostgreSQL官方发布的Windows预编译二进制包即可,包内已经包含编译扩展所需的全部头文件、库文件,直接使用即可规避编译全量源码的各类坑。
内容的提问来源于stack exchange,提问作者kloaf11
相关产品推荐
相关产品推荐

