WSL下Ubuntu 20安装Postgres后创建数据库永久卡住是什么原因?
可能故障成因
- WSL跨文件系统兼容性问题:如果你的Postgres数据目录存放于
/mnt/开头的Windows挂载分区(drvfs文件系统),该文件系统对Linux原生的文件锁、fsync同步机制支持不完善,会导致创建数据库时IO操作永久卡住。需将数据目录迁移到WSL原生ext4路径(默认路径为/var/lib/postgresql/<版本号>/main)即可解决。 - Locale配置缺失:创建数据库时需要调用系统对应字符集的locale配置,若WSL环境中未生成对应locale(可执行
locale -a查询现有配置),会导致初始化过程卡住。可先执行sudo locale-gen en_US.UTF-8 zh_CN.UTF-8生成所需locale,再重新尝试创建数据库。 - WSL内核参数不匹配:WSL默认的内核共享内存配置(shmmax、shmall)通常远低于物理机Linux的默认值,若配置过小会导致Postgres创建数据库时分配共享内存失败卡住。可执行
sysctl kernel.shmmaxsysctl kernel.shmall检查配置,适当调大对应数值即可。 - 模板数据库损坏:Postgres创建新数据库默认克隆
template1模板库,若安装时初始化数据库集群(initdb)过程受WSL环境影响未完成,导致模板库损坏,也会出现创建新库无响应的情况。可备份现有数据后删除原有数据目录,重新执行initdb初始化集群即可恢复。 - WSL版本兼容性问题:WSL1对Linux进程管理、IO操作的兼容性存在大量缺陷,若你当前使用WSL1运行Postgres,升级到WSL2即可解决该类兼容性故障。
- Windows安全软件拦截:Windows Defender等杀毒软件的实时扫描功能会拦截扫描WSL内的文件IO操作,若扫描Postgres的数据文件会导致IO阻塞卡住。可将WSL数据目录或Postgres的数据目录加入杀毒软件的排除列表验证。
内容的提问来源于stack exchange,提问作者Leo Jiang
相关产品推荐
相关产品推荐

