在postgres中,咨询锁是在设定的时间后过期,还是会话在空闲时自动过期?

问题描述 投票:0回答:1

我需要在我的应用程序实例上线时,将咨询锁挂在30秒左右。我注意到,如果我做一个 setTimeout 的回调来释放锁,如果时间超过30秒,我就会收到一个警告,说我没有一个类型为ExclusiveLock的锁。(如果我用10秒调用setTimeout,这种情况就不会发生)

    setTimeout(async () => {
      try {
        await sync.tryLockRelease(lockName) // call to pg_advisory_unlock(id);
        log.info(`${metadataKey}: lock released`)
      } catch (err) {
        log.error(`${metadataKey}: could not release lock: ${err.message}`, err)
      }
    }, 30000)

如果我添加一个每秒钟查询DB的间隔,这个问题就不会发生。这使我相信会话在大于10秒的某个时间被取消。

postgresql locking postgresql-9.5 pg-promise
1个回答
0
投票

原来在pg-promise(会被传递给底层的node-postgres库)中有一个设置,叫做 idleTimeoutMillis,它可以设置在 连接语法 pg-promise的页面。然而,似乎仍有一个悬而未决的问题,即底层驱动没有尊重该值。https:/github.combriancnode-postgresissues2139。

© www.soinside.com 2019 - 2024. All rights reserved.