Postgresql 如何查找postgres中哪个对象不处于先决条件状态?
我有一个在Postgresql上运行hibernate的java应用程序。 有时应用程序在运行之后会进入不一致状态Postgresql 如何查找postgres中哪个对象不处于先决条件状态?,postgresql,hibernate,Postgresql,Hibernate,我有一个在Postgresql上运行hibernate的java应用程序。 有时应用程序在运行之后会进入不一致状态 2017-08-01 11:50:17,317 WARN o.h.e.j.s.SqlExceptionHelper [http-nio-8080-exec-4] SQL Error: 0, SQLState: 55000 2017-08-01 11:50:17,318 ERROR o.h.e.j.s.SqlExceptionHelper [http-nio-8080-exec-4]
2017-08-01 11:50:17,317 WARN o.h.e.j.s.SqlExceptionHelper [http-nio-8080-exec-4] SQL Error: 0, SQLState: 55000
2017-08-01 11:50:17,318 ERROR o.h.e.j.s.SqlExceptionHelper [http-nio-8080-exec-4] This statement has been closed.
我打开postgres日志
log_destination = 'csvlog'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_file_mode = 0600
client_min_messages = debug5
log_min_messages = debug5
log_min_error_statement = debug5
postgres日志中没有任何记录表明某个对象未处于先决条件状态
如何找出哪个对象未处于先决条件状态?根据注释中的附加信息,该错误消息源自JDBC驱动程序 原因是在使用
close()
方法关闭org.postgresql.jdbc.pg语句
、org.postgresql.jdbc.PgPreparedStatement
或org.postgresql.jdbc.PgCallableStatement
后,代码尝试再次使用它
这是Hibernate或应用程序代码中的一个错误,可能是由于线程没有正确同步。找出包含的异常,它的消息将告诉您更多信息。这是一个大问题-没有其他异常。在select查询的三个日志项之后,应用程序日志中只有两行<代码>2017-08-01 11:50:17317警告o.h.e.j.s.SqlExceptionHelper[http-nio-8080-exec-4]SQL错误:0,SQLState:55000 2017-08-01 11:50:17318错误o.h.e.j.s.SqlExceptionHelper[http-nio-8080-exec-4]此语句已关闭。第二个语句指出此会话已断开,并导致应用程序断开。PostgreSQL不会在没有错误消息的情况下抛出错误55000,JDBC驱动程序会将其传播为
java.sql.SqlException
。也许hibernate没有显示错误消息,但它一定在某个地方。你能用调试器来深入研究它吗?@LaurenzAlbe我能找出代码55000是postgres驱动程序中的代码。这不是PostgreSQL状态。是。我扩展了postgres驱动程序,可以看到一条语句(使用原子计数器)同时在不同的线程中使用。最奇怪的是它(PgPreparedStatement)用于不同的查询。我可以理解它是否用于不同线程中的类似查询。但不是这样…从5.2降级到Hibernate 4.3后,异常消失。。。