我正在执行一些测试来评估我们DAO层的框架。其中一个测试用例是复制表锁并检查框架在这种情况下的行为。这些测试使用Java和主要JPA完成,使用Hibernate和EclipseLink作为JPA供应商,我们也单独使用Hibernate,并且我们有一组接口作为框架的桥梁,以减轻我们对任何其他ORM框架的测试。如何定义Postgres 9.0的锁定等待时间?
我已经成功地为我们的MySQL 5.5.11数据库生成了表锁定测试用例,这是因为运行测试用例的应用程序刚被冻结了50秒(MySQL中锁等待时间的默认值),然后发生了与SQLException相关的问题在日志中出现表锁定等待超时异常。然后我切换测试的配置以连接到Postgres 9.0并重新执行测试,我可以复制表锁,但是现在应用程序刚被冻结了10分钟,并且没有抛出异常,所以我必须停止测试执行。
我正在寻找如何改变Postgres 9.0的这个时间,并得到Postgres 9.3在这里的结果:Client Connection Defaults under lock_timeout。然后我检查了9.0的文档,并且此参数不可用。你知道我怎么能在postgres配置或我的Java客户端应用程序中更改它,可能是JPA或Hibernate或EclipseLink特定配置,只是为了检查数据库中的表锁异常?最糟糕的情况是在生产环境中出现表锁,除非应用程序停止(我们正在与框架一起测试),否则我们无法从此恢复。
这很相似,但它不一样。我没有得到锁表异常,但我想这是我能得到的最接近这个版本的Postgres的。 – 2014-10-10 17:35:51
如果你所关心的只是锁定错误而不是超时,那么你可以在你的锁定尝试中加入'NOWAIT'。 – 2014-10-10 17:48:07
是的,这是你最接近9.0的最接近的。升级时间。 – 2014-10-11 14:30:49