如何避免Ubuntu 16 LTS安装PostgreSQL v9.10时的正则表达式告警?
解决Ubuntu 16 LTS安装旧版PostgreSQL时的Perl正则警告问题
我在帮用户部署旧版PostgreSQL到Ubuntu 16.04的时候,经常碰到这个警告——本质上是Perl版本兼容的问题:Ubuntu 16.04自带的Perl 5.22+对正则表达式的语法检查更严格了,而PostgreSQL 9.x(尤其是9.0及以后的部分旧版本)的安装/初始化脚本里用了未转义的左大括号{,这在新版Perl里就会触发 deprecation 警告。
下面给你几个可行的解决思路,按优先级排序:
1. 临时抑制警告(最快上手)
如果只是想先完成安装,不想折腾脚本修改,可以在执行安装命令前先设置Perl环境变量,让它跳过这个警告:
export PERL5OPT='-Mre=strict'
然后正常运行apt install postgresql就行。这个环境变量会告诉Perl放宽对未转义大括号的检查,警告就不会弹出来了。要是这个不行,试试另一个变量:
export PERL_UNICODE=
这俩选一个就行,都是临时生效,关闭终端就没了。
2. 永久修复(修改PostgreSQL脚本)
要是想彻底解决这个问题,得找到触发警告的脚本并修正正则语法:
- 先根据警告提示里的路径找到对应的脚本,通常这类脚本在
/usr/share/postgresql-*/目录下,比如数据库初始化、维护相关的Perl脚本。 - 找到包含
(?<的正则部分(就是错误里<-- HERE标记的位置),把未转义的{改成\{,或者调整成符合Perl 5.22+的正则语法。比如原来的/(?<mygroup>.*)/这种语法,确保大括号的使用是规范的。 - 修改前记得备份原脚本,避免改坏了出问题。
3. 推荐方案:升级PostgreSQL版本
如果你的业务场景允许,其实更建议安装PostgreSQL官方源里的更高稳定版本(比如10、11)——这些版本已经修复了Perl语法兼容的问题,而且性能和安全性都比老版本好。安装命令也很简单:
apt install postgresql-10
(根据你需要的版本替换数字就行)
内容的提问来源于stack exchange,提问作者Peter Krauss
相关产品推荐
相关产品推荐

