Delphi PostgreSQL:会话超时?

Delphi PostgreSQL:会话超时?,delphi,session,postgresql,timeout,Delphi,Session,Postgresql,Timeout,我正在寻找一种控制PGSQL(9.0)客户端(Windows)会话超时的方法 当一次会议结束时?他们死后发生了什么 我如何才能强制一个会话终止?(例如,它在某个错误的长查询中被“锁定”,我想强制服务器释放资源) 谢谢你: dd 我将此扩展以理解它: 数据库需要知道哪个会话已死亡。 死会话必须被释放,因为它只保存资源,如果这个操作没有完成,我们应该获得很多锁,否则我们可能会失去可用的连接(达到最大值) 其他数据库(FireBird、EDB)为其定义超时参数 到达时,会话设置为死,用户连接中止 为

我正在寻找一种控制PGSQL(9.0)客户端(Windows)会话超时的方法

当一次会议结束时?他们死后发生了什么

我如何才能强制一个会话终止?(例如,它在某个错误的长查询中被“锁定”,我想强制服务器释放资源)

谢谢你: dd


我将此扩展以理解它: 数据库需要知道哪个会话已死亡。 死会话必须被释放,因为它只保存资源,如果这个操作没有完成,我们应该获得很多锁,否则我们可能会失去可用的连接(达到最大值)

其他数据库(FireBird、EDB)为其定义超时参数

到达时,会话设置为死,用户连接中止

为了避免精疲力竭,你需要定期做一些事情,延长时间

有三种方法可以达到超时: 1.)客户端程序挂起、冻结或关闭。 2.)网络连接中断 3.)客户端发送了一些很长的查询/存储过程,但没有完成

如果服务器未处理超时,则可能有人的事务、锁等在X小时内仍处于活动状态,您只有一种方法可以删除它:重新启动db server服务

其他数据库处理死机会话,因为它们不再与服务器交互,因此客户端出现一些错误,需要重新启动客户端软件

一些数据库支持返回到“非活动”但“非死”会话,并且可以继续工作

因此,在这篇序言中,我再次提出我的问题:

  • 如何在pgsql下控制客户端的会话超时?系统变量、SQL参数等
  • 我怎样才能延长这段时间
  • 如果一个长查询耗尽了时间,会发生什么
  • pgsql server何时释放客户端持有的资源
  • 谢谢:
    dd

    我不理解你问题的第一部分,但是要终止正在运行的会话,你可以使用
    pg\u terminate\u backend()

    要终止正在运行的会话的查询,请使用
    pg\u cancel\u query()

    手册中对这两种功能进行了说明:

    有三种方法可以达到超时:1.)客户端程序挂起、冻结或关闭。2.)网络连接断开3.)客户端发送了一些很长的查询/存储过程,但没有完成

    对于2,tcp_keepalives_*设置可能有用:


    对于3,有一个语句超时设置:但这只会终止语句,而不会终止连接。

    我不知道Postgres中有这样的设置。对我来说,这听起来像是你最好修复应用程序中的连接处理。我能想到的唯一“解决方案”是使用位于应用程序和数据库之间的连接池(如pgpool或pgBouncer)。由于它充当代理,应用程序不会意识到这一点。