gpt4 book ai didi

postgresql - 为什么即使 "service postgres status"返回 OK,pgsql 有时也不会在启动后的前几秒内监听?

转载 作者:行者123 更新时间:2023-12-04 19:38:21 25 4
gpt4 key购买 nike

我有一个使用 postgresql 9.0 和一些调用我的自定义库的 plperl 函数的网络应用程序。所以,当我想像刚刚发布一样重新开始时,我的开发区域的构建过程基本上是这样的:

  • 从生产中转储数据和角色
  • 删除开发数据和角色
  • 将生产数据和角色恢复到 dev
  • 重新启动 postgresql 以便刷新我的自定义库的任何缓存版本,并且将拾取新更改的版本
  • 应用我的开发增量
  • 吸尘器

  • 自从将我的应用程序堆栈从 win32 切换到 CentOS 后,我现在有时(即,似乎只有当且仅当我在“一段时间”内没有运行此构建过程时——也许至少一天)在我的构建脚本尝试应用增量:
    psql: could not connect to server: No such file or directory
    Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

    具体来说,在 shell 级别无法执行的是:
    psql --host=$host -U $superuser -p $port -d $db -f "$delta_filename.sql"

    如果在看到此错误后立即尝试使用 psql 连接到 dev 数据库,我可以毫无问题地这样做。此外,如果我只是重新运行构建脚本,它第二次工作正常,每次我遇到这个。可接受的解决方法,但是否需要关注根本原因?

    到目前为止,在我尝试对此进行调试时,我在服务器重新启动后插入了一个步骤(当然会报告正常关闭,正常启动),从而检查 service postgresql-dev status 的结果在一个循环中,如果失败,则在两次尝试之间等待 2 秒。在我最新的构建脚本运行中,说循环在第一次尝试时成功 - status返回“正在运行”——但随后应用增量仍然失败,并出现上述连接错误。同样,第二次尝试成功,在失败后通过脚本外部的 psql 连接也是如此。

    我的下一次调试尝试是在第一次 status 之前休眠 5 秒。检查,看看会发生什么。到目前为止,这似乎解决了问题。

    那么为什么 pgsql 启动后没有监听套接字 [OK]并且还有状态 running ok ,最多 5 秒,除非它“最近”重新启动?

    最佳答案

    状态检查只检查进程是否正在运行。它不检查您是否可以连接。在启动进程和准备好接受连接之间可能有任意时间。通常是几秒钟,但也可能更长。如果您需要解决这个问题,您需要编写脚本,以便在继续之前检查是否可以连接。你可能会争辩说 CentOS 软件包应该为你做这件事,但事实并非如此。

    实际上,我认为在您的情况下,没有理由完全重启。除非您使用 shared_preload_libraries 加载库,重新启动连接以获取新库就足够了。

    关于postgresql - 为什么即使 "service postgres status"返回 OK,pgsql 有时也不会在启动后的前几秒内监听?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20500105/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com