Вопрос:
Я получаю ошибки FATAL: the database system is shutting down при создании соединений JDBC PostgreSQL на сервере PostgreSQL 9.2. Конкретный путь исключения, который я получаю от JDBC, находится здесь:
Caused by: org.postgresql.util.PSQLException: FATAL: the database system is shutting down at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:398) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:173) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64) at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:136) at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29) at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21) at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31) at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24) at org.postgresql.Driver.makeConnection(Driver.java:393) at org.postgresql.Driver.connect(Driver.java:267)
Из разных файлов журнала (из PostgreSQL, с нашего уровня управления, из приложения, использующего PostgreSQL), я не вижу, что фактически происходит остановка базы данных (как обычно, для PostgreSQL создаются другие соединения, и т.д.), однако в журналах сервера PostgreSQL я вижу сообщение об ошибке с той же меткой времени:
2014-06-16 12:30:00.736 GMT LOG: connection received: host=127.0.0.1 port=38530 2014-06-16 12:30:00.737 GMT FATAL: the database system is shutting down
Исследование онлайн, я узнал, что это сообщение об ошибке используется всякий раз, когда PostgreSQL отключает подключения.
Почему PostgreSQL откажется дать мне новое соединение? Может ли это быть вызвано какой-то разновидностью ресурсов? Как я могу получить дополнительную информацию об ошибке из самого PostgreSQL?
Лучший ответ:
Эта проблема оказалась вызвана очень плохим неправильным использованием PostgreSQL, где наш сервер загрузил два экземпляра PostgreSQL в одном каталоге данных (он удалил postmaster.pid и использовал новый номер порта, поэтому нормальные меры предосторожности против этого поведение было исключено), что объясняет, почему журналы не содержат никакой полезной информации – они были перезаписаны экземпляром PostgreSQL, который не отказывался от соединений. Фактическая проблема была вызвана сложным взаимодействием между конкурирующими экземплярами PostgreSQL, и я надеюсь, что никто еще не столкнется с этой проблемой!