我在查看Postgres Docs,但它似乎没有提及连接超时或事务未关闭时会发生什么情况。使用这个锁是安全的吗?如果一个来自 Web 服务器的线程获得了行级锁并超时了,会发生什么?如果连接已中断,那么锁将被释放吗?如果没有呢?
文档中唯一找到的保证是使用statement_timeout,但我认为后者会影响读取和写入,这不是预期的效果。
文档中唯一找到的保证是使用statement_timeout,但我认为后者会影响读取和写入,这不是预期的效果。
statement_timeout (integer)
任何花费指定毫秒数以上时间的语句都将被中止,从命令从客户端到达服务器的时间开始计算。如果log_min_error_statement设置为ERROR或更低级别,则超时的语句也将被记录在日志中。值为零(默认值)表示关闭此功能。
不建议在postgresql.conf中设置statement_timeout,因为它会影响所有会话。
pg_locks
和pg_stat_activity
,查找在锁定上阻止其他事务超过 'n' 秒的事务并终止它们。请参见 https://wiki.postgresql.org/wiki/Lock_Monitoring - Craig Ringer