当前位置:论坛首页 > Linux面板 > 建议

【已完成】postgresql无法创建数据库的解决办法

发表在 Linux面板2021-12-31 05:14 [复制链接] 5 4548

本地环境没问题,线上新安装的面板,却无法创建数据库(其实是创建没有成功,但是却还显式出来)
看了一下源码,1.3的管理器有bug,原因是,错误的判断了监听地址,导致数据库执行了重启
这里就拼的是数据库restart的速度,速度快的,就能创建成功,速度慢的,就创建失败,所以这可能就是官方之前无法复现的原因吧

关键代码在pgsql_manager_main.py 115行
  1. if listen_ip.strip() not in ["'127.0.0.1'", "'localhost'"]:
  2.             self.sed_conf("listen_addresses", "'*'")  # 修改监听所有地址
  3.             public.ExecShell("/etc/init.d/pgsql restart")
复制代码

而管理器模板中确实这样定义本地地址,而且上面的地址还多了单引号

  1. <select name="listen_ip"  class="bt-input-text mr5" style="width:100px">\
  2.                                         <option value="127.0.0.1/32">本地服务器</option>\
  3.                                         <option value="0.0.0.0/0">所有人</option>\
  4.                                         <option value="ip">指定网段</option>\
  5.                                     </select>\
复制代码
官方的开发兄弟太大意了

解决办法:搜索
  1. if listen_ip.strip() not in ["'127.0.0.1'", "'localhost'"]:
复制代码

改成
  1. if listen_ip.strip() not in ["127.0.0.1/32","127.0.0.1", "localhost"]:
复制代码

这样就不会进入restart 导致创建数据库和用户失败
  1. public.ExecShell("/etc/init.d/pgsql restart")
复制代码

其实这里也还是不合理,如果创建的时候就定义了监听指定网段或所有人,那么还是会重启。
是不是应该改成这样?(未测试)
  1. public.ExecShell("/etc/init.d/pgsql reload")
复制代码







使用道具 举报 只看该作者 回复
发表于 2021-12-31 10:37:54 | 显示全部楼层
感谢分享
使用道具 举报 回复
发表于 2022-3-9 21:41:32 | 显示全部楼层
1.6版本问题仍存在,感谢分享
使用道具 举报 回复 支持 反对
发表于 2022-3-10 12:00:23 | 显示全部楼层
耗子 发表于 2022-3-9 21:41
1.6版本问题仍存在,感谢分享

dapaopgsql.png 已经修改了的,您是什么系统?有没有重新安装过pgsql管理器
使用道具 举报 回复 支持 反对
发表于 2022-3-10 23:25:08 | 显示全部楼层
大炮运维V587 发表于 2022-3-10 12:00
已经修改了的,您是什么系统?有没有重新安装过pgsql管理器

rocky8.5 pgsql管理器1.6
使用道具 举报 回复 支持 反对
发表于 2022-3-10 23:36:15 | 显示全部楼层
耗子 发表于 2022-3-10 23:25
rocky8.5 pgsql管理器1.6

3月5号安装的1.6版本有这个问题,今天晚上重新修复安装的版本没有了。
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术免费分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表