2014-10-10 68 views
0

我正在执行一些测试来评估我们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特定配置,只是为了检查数据库中的表锁异常?最糟糕的情况是在生产环境中出现表锁,除非应用程序停止(我们正在与框架一起测试),否则我们无法从此恢复。

回答

2

尝试statement_timeout - 它已经存在很久了。

SET statement_timeout=1000; 
-- try to take lock, and get an exception 1000ms later 
+0

这很相似,但它不一样。我没有得到锁表异常,但我想这是我能得到的最接近这个版本的Postgres的。 – 2014-10-10 17:35:51

+0

如果你所关心的只是锁定错误而不是超时,那么你可以在你的锁定尝试中加入'NOWAIT'。 – 2014-10-10 17:48:07

+0

是的,这是你最接近9.0的最接近的。升级时间。 – 2014-10-11 14:30:49