代码之家  ›  专栏  ›  技术社区  ›  user1187968

Postges服务器如何知道保持数据库连接打开

  •  0
  • user1187968  · 技术社区  · 8 年前

    如果我忘记了Python源代码,我想知道Postgres服务器是如何决定关闭DB连接的。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Laurenz Albe    8 年前

    PostgreSQL确实做到了这一点,尽管它不是ping。

    PostgreSQL使用一个名为 保持活力 保留邮件 致另一方 同龄人 ),如果几次尝试后都没有得到答案,它就会关闭连接。

    keepalive的默认超时很长,大约两个小时。您可以在PostgreSQL中配置设置,请参阅 the documentation 详细信息。

    默认值和可能的值根据所使用的操作系统而异。

    客户端有一个类似的功能可用,但不太有用,默认情况下未启用。

        2
  •  2
  •   tadman    8 年前

    当脚本退出时,连接将关闭,服务器将相应地清理它。同样,在像Python这样的垃圾收集语言中,当您停止使用连接并且它超出范围时,它通常会被关闭和清理。

    编写的代码可能永远不会正确释放这些资源,只会永久创建新的句柄,如果服务器端没有处理在一段空闲时间后杀死这些资源的东西,这可能会有问题。默认情况下,Postgres不会这样做,尽管可以将其配置为,但MySQL会这样做。

    简而言之,Postgres将保持数据库连接打开,直到您显式地终止它,例如通过 close 调用或隐式调用,例如句柄超出范围并被垃圾收集器删除。