Org postgresql util psqlexception ошибка при попытке подсоединения

Org.postgresql.util.PSQLException: попытка подключения не выполнена Я подключаюсь к базе данных postgres с помощью java-сервисов (оси apache) с JDBC

Содержание

  1. Org.postgresql.util.PSQLException: попытка подключения не выполнена
  2. Как решить ошибку postgresql «попытка подключения не удалась»?
  3. Проверить состояние БД телнетом
  4. Проверить состояние БД с помощью Database IDE
  5. Не программируйте жестко параметры
  6. Проблемы с подключением к контейнеру PostgreSQL изнутри контейнера

Org.postgresql.util.PSQLException: попытка подключения не выполнена

Я подключаюсь к базе данных postgres с помощью java-сервисов (оси apache) с JDBC подключениями для получения данных. Но внезапно в большинстве случаев я получаю исключение org.postgresql.util.PSQLException: The connection attempt failed. и несколько раз работает нормально. Здесь я использую много подготовленных заявлений. Мой пример кода

трассировка стека об этом исключении

Я проверил журналы postgres и нашел в следующих случаях следующие утверждения:

1. ВНИМАНИЕ: работник занял слишком много времени, чтобы начать; отменен.

2. не может подключаться к общей памяти (key =…., addr =…..): 487.

3. не может получать данные от клиента: соединение не может быть выполнено, потому что целевой компьютер активно отказался от него.

4. неожиданный EOF при подключении клиента.

пожалуйста, помогите мне. Спасибо заранее

Соединение было закрыто, когда Java пыталась его прочитать. Это может быть вызвано:

  • Сервер PostgreSQL перезапускается
  • Бэкэнд PostgreSQL, к которому вы были подключены к завершению
  • Бэкэнд PostgreSQL, к которому вы были подключены к сбою
  • Удаленное сетевое подключение
  • Плохо работающие брандмауэры с сохранением состояния
  • Недействительные тайм-ауты соединений из таблиц NAT-соединений брандмауэра/маршрутизаторов NAT

… и, вероятно, больше. Проверьте журналы сервера PostgreSQL, чтобы узнать, есть ли там что-то информативное; также рассмотрите возможность выполнения трассировки сети с помощью инструмента, такого как Wireshark.

Источник

Как решить ошибку postgresql «попытка подключения не удалась»?

Я хотел построить свой проект Springboot. Затем я хочу докеризовать свой код. Но когда я построил, я получил ошибку. Я думаю, что это произошло из-за настройки postgresql. Но я не мог найти причину.

Не могли бы вы мне помочь?

Ошибка выглядит так;

org.postgresql.util.PSQLException: попытка подключения не удалась.

Является ли веб-контейнер размещением вашего весеннего приложения? Если да, можете ли вы выполнить ping из своего веб-контейнера в контейнер postgresql?

Да, мое приложение представляет собой веб-контейнер. Но я не мог пропинговать контейнер postgresql. Когда я использовал jdbc:postgresql://localhost:5432/productdb в application.yml, я мог успешно собрать, но затем, когда я хотел запустить докер, произошла следующая ошибка. org.postgresql.util.PSQLException: подключение к локальному хосту: 5432 отклонено

Вам не нужно подключаться к локальному хосту (localhost = сам контейнер, вам нужно подключиться с именем контейнера контейнера postgres, когда вы хотите подключиться из другого контейнера;

lvthillo, да, я знаю. Вот почему я изменил localhost. Сейчас пользуюсь как указано выше. Но когда я хотел выполнить чистую установку пакета mvn, я получил ошибку «org.postgresql.util.PSQLException: попытка подключения не удалась».

Если ваш файл docker-compose.yml хорошо настроен, в нем должны быть запущены два контейнера:

источник: https://intelligentbee.com/2017/09/18/setup-docker-symfony-project/

Один для приложения и один для БД.

Эти контейнеры находятся на одном хосте, поэтому, если вашей сети необходимо подключиться к базе данных, вместо этого вы должны указать IP-адрес: localhost, 127.0.0.1 или 0.0.0.0.

Вы, кошка, получаете ip с этим

Если ваша сеть и ваша база данных будут находиться на разных хостах, вы можете использовать общедоступный IP-адрес, на котором размещена база данных. Но поскольку вы используете docker-compose, это не так.

Я предлагаю вам проверить, готова ли и доступна ли ваша база данных, прежде чем использовать ее в своем веб-приложении.

Чтобы протестировать свою базу данных, вы можете воспользоваться одним из следующих подходов:

Проверить состояние БД телнетом

Есть несколько способов, но самый простой вариант — это команда телнет. Например, чтобы проверить, готов ли контейнер mysql к использованию на той же машине, на которой он был запущен:

Если ваш mysql готов, telnet должен показать вам результат, подобный следующему рисунку:

Любой другой отрицательный результат будет означать, что ваш контейнер mysql закрыт или неверен.

Примечание. Измените 3306 на правильный порт postgress.

Проверить состояние БД с помощью Database IDE

Другим вариантом для пользователей пользовательского интерфейса является тестирование подключения к базе данных с использованием какой-либо среды разработки базы данных. Просто загрузите одну из нескольких клиентских IDE postgress и протестируйте свою базу данных.

Не программируйте жестко параметры

Хорошей практикой является внешняя конфигурация с использованием переменных среды. Spring и докер знать и позволяют нам их использовать.

Итак, измените свой приложение.yml :

Для разработка в вашем затмении используйте запустить как конфигурации >> раздел среды

Для производство вы можете:

  • экспортировать переменную перед бегать
  • передайте его в предложение о запуске докера.
  • Наконец, чтобы избежать ручного управления вашими переменными, вы можете использовать: http://github.com/jrichardsz/tachima-ops

Комментарии (3)

JRichardsz, перед запуском в докере, когда я пытаюсь собрать, я получаю сообщение об ошибке «попытка не удалась».

Вы имеете в виду, когда вы выполняете: mvn clean package?

mvn clean package, не запускает приложение. Просто скомпилируйте его. Не могли бы вы прикрепить весь журнал отказов? Возможно, это ошибка модульного теста.

Использование программного обеспечения DataGrip и БД в DigitalOcean. Получил ошибку

[08001] The connection attempt failed. java.net.SocketTimeoutException: connect timed out.

Убедился, что мой текущий IP-адрес был одним из разрешенные входящие соединения, и это сработало. (Хотя ошибка, вероятно, должна была быть другой.)

Надеюсь, это кому-то в конечном итоге пригодится.

Ваша БД должна принимать соединения вне контейнера

sudo docker run —name pg -p 5432:5432 -v pg_data:/var/lib/postgres/data -e POSTGRES_DB=mydb -e POSTGRES_USER=pg_user -e POSTGRES_PASSWORD=pg_password -d postgres -c «listen_addresses=*»

«listen_addresses=» Будет принимать соединение вне контейнера*

Вы можете использовать следующие учетные данные для подключения вашего проекта весенней загрузки.

Источник

Проблемы с подключением к контейнеру PostgreSQL изнутри контейнера

У меня возникают проблемы при попытке подключить контейнер докеров к контейнеру PostgreSQL. Выдается следующее исключение:

Я запускаю свои контейнеры через docker-compose.yml, который выглядит так:

Настройки приложения My Spring Boot устанавливаются следующим образом:

Не знаю, что делаю не так, может кто-нибудь поможет? Спасибо!

После более тщательного анализа трассировки стека я заметил

ошибка, которая в первую очередь вызывает проблему. После получения IP-адреса из контейнера postgres-db через

и установив DATABASE_HOST на этот IP-адрес, это тоже не сработало.

localhost не может работать; не должно ли это относиться к IP-адресу контейнера?

имя пользователя и пароль не совпадают

Скопировал неверный логин, отредактировал свой пост. @duffymo: я настраиваю хост через docker-compose на имя службы, в данном случае postgres-db.

Это может произойти, если ваша служба stockprocessor запускается до полной инициализации вашей базы данных или во время инициализации.

Затем вы должны убедиться, что служба postgres-db принимает соединения, прежде чем запускать ваше приложение.

Для этого вы можете использовать сценарий wait-for-it.sh (отметьте https://docs.docker.com/compose/startup-order/) перед запуском команды в контейнере вашего приложения. В качестве альтернативы вы можете установить политику перезапуска ( restart: on-failure ) для вашей службы stockprocessor (https://docs.docker.com/compose/compose-file/compose-file-v2/#restart) для автоматического перезапуска службы (до тех пор, пока ваша база данных не будет запущена).

Привет @norbjd, я попробовал оба решения, но, к сожалению, ни одно из них не сработало. Хотя сценарий ожидания вообще не задерживал запуск, а стратегия перезапуска просто позволяла процессору запускаться снова и снова, я попытался получить доступ к контейнеру postgres-db — и безуспешно. База данных, которую я хотел, уже была создана, и я мог манипулировать таблицами и тому подобным, пока процессор перезагружался снова и снова.

Хм, понятно, просто написал это решение, потому что 90% подобных проблем вызваны порядком запуска. У вас есть дополнительная информация о вашем исключении? Stacktrace, какая строка кода вызывает это, . (отредактируйте свой вопрос). The connection attempt failed может быть вызван 1000 причинами!

Ах да, я только что добавил всю трассировку стека и теперь заметил эту ошибку: Caused by: java.net.UnknownHostException: postgres-db — но localhost тоже не работает.

Можете ли вы проверить содержимое /etc/hosts в вашем контейнере stockprocessor (есть ли postgres-db внутри)?

Я добавил вывод хостов к исходному вопросу.

Я не могу воспроизвести вашу проблему на простом примере ( image: ubuntu:14.04 , command: [«nc», «postgres-db», «5432»] , restart: on-failure , заменяющий вашу конфигурацию службы stockprocessor ). Вы можете это попробовать? Затем stockprocessor должен завершиться с кодом выхода 0 (он может сначала выйти с 1, если postgres недоступен, но должен перезапускаться, пока он не заработает).

Источник

У меня серьезные проблемы с подключением из DBVisualizer (8.0.9) к серверу PostgreSQL, работающему в той же локальной сети. DBVis основан на Java, поэтому для подключения используется JDBC. Подключение из PGAdmin работает как шарм — только подключение DBVis через JDBC не работает. И мне нужно, чтобы это было решено!

Specs:
My PC: Ubuntu 12.04 LTS (64Bit), IP: 192.168.110.193
Server OS: Suse LINUX Enterprise Server 11, IP: 192.168.110.12
Postgresql server version: 9.1
Java VM: Java HotSpot(TM) 64-Bit Server VM
Java Version: 1.6.0_33
Java Vendor: Sun Microsystems Inc.
OS Name: Linux
OS Arch: amd64
OS Version: 3.2.0-25-generic 

При запуске соединения я получаю сообщение «Подключение…», и после ~ 5 минут ожидания в окне появляется следующее сообщение об ошибке. окно подключения:

"An error occurred while establishing the connection:
Long Message:
The connection attempt failed.
Details:
Type: org.postgresql.util.PSQLException
SQL State: 08001"

В разделе консоль отладки Я получил:

12:04:57 [DEBUG pool-2-thread-8 D.ā] RootConnection: Driver.acceptsURL("jdbc:postgresql://192.168.110.12:5432/MYDATABASE")
12:04:57 [DEBUG pool-2-thread-8 D.ā] RootConnection: Driver.connect("jdbc:postgresql://192.168.110.12:5432/MYDATABASE", {user=******, password=******})
12:24:58 [DEBUG pool-2-thread-8 D.ā] RootConnection: EXCEPTION -> org.postgresql.util.PSQLException: The connection attempt failed.

Отладочная информация Драйвер JDBC также предусмотрено:

org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:150)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.(AbstractJdbc4Connection.java:30)
at org.postgresql.jdbc4.Jdbc4Connection.(Jdbc4Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:393)
at org.postgresql.Driver.connect(Driver.java:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.onseven.dbvis.d.B.D.ā(Z:1548)
at com.onseven.dbvis.d.B.F$A.call(Z:278)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679) 

Для удобства соответствующая часть сервера pg_hba.conf:

#"local" is for Unix domain socket connections only
local all all peer

#IPv4 local connections:
host all all 192.168.110.0/24 md5

#IPv6 local connections:
host all all ::1/128 md5

И соответствующие части postgresql.conf:

# - Connection Settings -

listen_addresses = '*'                  # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
max_connections = 100                   # (change requires restart)
# Note:  Increasing max_connections costs ~400 bytes of shared memory per
# connection slot, plus lock space (see max_locks_per_transaction).
#superuser_reserved_connections = 3     # (change requires restart)
#unix_socket_directory = ''             # (change requires restart)
#unix_socket_group = ''                 # (change requires restart)
#unix_socket_permissions = 0777         # begin with 0 to use octal notation
                                        # (change requires restart)
#bonjour = off                          # advertise server via Bonjour
                                        # (change requires restart)
#bonjour_name = ''                      # defaults to the computer name
                                        # (change requires restart)

# - Security and Authentication -

#authentication_timeout = 1min          # 1s-600s
#ssl = off                              # (change requires restart)
#ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'      # allowed SSL ciphers
                                        # (change requires restart)
#ssl_renegotiation_limit = 512MB        # amount of data between renegotiations
#password_encryption = on
#db_user_namespace = off

# Kerberos and GSSAPI
#krb_server_keyfile = ''
#krb_srvname = 'postgres'               # (Kerberos only)
#krb_caseins_users = off

# - TCP Keepalives -
# see "man 7 tcp" for details

#tcp_keepalives_idle = 0                # TCP_KEEPIDLE, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_interval = 0            # TCP_KEEPINTVL, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_count = 0               # TCP_KEEPCNT;
                                        # 0 selects the system default

Вопрос:

Я подключаюсь к базе данных postgres с помощью java-сервисов (оси apache) с JDBC подключениями для получения данных. Но внезапно в большинстве случаев я получаю исключение org.postgresql.util.PSQLException: The connection attempt failed. и несколько раз работает нормально. Здесь я использую много подготовленных заявлений. Мой пример кода

Connection connection=null;
try
{
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
ps1=connection.prepareStatement("select * from emp");
rs1=ps1.executeQuery();
while(rs1.next())
{
ps2=connection.prepareStatement("select * from dept where dept_no="+rs1.getInt("dept_no"));
rs2=ps2.executeQuery();
while(rs2.next())
{
................
................
}
}
}
catch(Exception e)
{
System.out.println("Exception occurred is"+e.getMessage());
}
finally
{
try{if(rs1!=null)rs1.close();}catch(Exception e){ System.out.println("*1closing error--->"+e);}
try{if(ps1!=null)ps1.close();}catch(Exception e){ System.out.println("**1closing error--->"+e);}
try{if(rs2!=null)rs2.close();}catch(Exception e){ System.out.println("*2closing error--->"+e);}
try{if(ps2!=null)ps2.close();}catch(Exception e){ System.out.println("**2closing error--->"+e);}
try{if(connection!=null)connection.close();}catch(Exception e){ System.out.println("***closing error--->"+e);}
}

трассировка стека об этом исключении

org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:137)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:124)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:386)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.codon.service.WareHouseServer.get_picks(WareHouseServer.java:7415)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:259)
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:254)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:95)
... 37 more

Я проверил журналы postgres и нашел в следующих случаях следующие утверждения:

1. ВНИМАНИЕ: работник занял слишком много времени, чтобы начать; отменен.

2. не может подключаться к общей памяти (key =…., addr =…..): 487.

3. не может получать данные от клиента: соединение не может быть выполнено, потому что целевой компьютер активно отказался от него.

4. неожиданный EOF при подключении клиента.

пожалуйста, помогите мне. Спасибо заранее

Ответ №1

Реальная проблема:

Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read

Соединение было закрыто, когда Java пыталась его прочитать. Это может быть вызвано:

  • Сервер PostgreSQL перезапускается
  • Бэкэнд PostgreSQL, к которому вы были подключены к завершению
  • Бэкэнд PostgreSQL, к которому вы были подключены к сбою
  • Удаленное сетевое подключение
  • Плохо работающие брандмауэры с сохранением состояния
  • Недействительные тайм-ауты соединений из таблиц NAT-соединений брандмауэра/маршрутизаторов NAT

… и, вероятно, больше. Проверьте журналы сервера PostgreSQL, чтобы узнать, есть ли там что-то информативное; также рассмотрите возможность выполнения трассировки сети с помощью инструмента, такого как Wireshark.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Org postgresql util psqlexception ошибка оператор не существует integer character varying
  • Org postgresql util psqlexception error relation does not exist
  • Org postgresql util psqlexception error operator does not exist bigint character varying
  • Org postgresql util psqlexception an i o error occurred while sending to the backend
  • Org openqa selenium webdriverexception unknown error cannot determine loading status

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии