我正在执行一些测试来评估DAO层的框架。其中一个测试用例是复制表锁并检查框架在这种情况下的行为。这个测试是使用Java完成的,主要是JPA,使用Hibernate和EclipseLink作为JPA供应商,我们也单独使用Hibernate,我们有一组接口作为框架的桥梁,以简化我们对任何其他ORM框架的测试
我已成功生成针对MySQL 5.5.11数据库的表锁测试用例,因为运行测试用例的应用程序被冻结了50秒(MySQL中锁定等待时间的默认值),然后是一个与之相关的SQLException日志中出现表锁等待超时异常。然后我切换测试的配置连接到Postgres 9.0并重新执行测试,我可以复制表锁,但现在应用程序刚冻结了10分钟,并且没有抛出异常,所以我必须停止测试执行
我正在搜索如何更改Postgres 9.0的这段时间,并在此处获得Postgres 9.3的结果: lock_timeout 下的Client Connection Defaults。然后我检查了9.0的文档,这样的参数不可用。你知道如何在postgres配置或我的Java客户端应用程序中更改它,可能是JPA或Hibernate或EclipseLink特定配置只是为了检查数据库中的表锁异常?最糟糕的情况是表锁出现在生产环境中,除非应用程序停止(我们正在与框架一起测试),否则我们无法从中恢复。
答案 0 :(得分:2)
尝试statement_timeout - 它已经存在了很长时间。
SET statement_timeout=1000;
-- try to take lock, and get an exception 1000ms later