Свойства Подключения К Базе Данных Heroku

Я пытаюсь выполнить относительно тривиальную задачу: я хочу подключиться к базе данных Heroku. Я создал базу данных и получил учетные данные с сайта Heroku. Однако, когда я пытаюсь подключиться к базе данных с помощью что-нибудь помимо клиента командной строки терминала "heroku", я получаю фатальные ошибки или не могу подключить ошибки.

два инструмента, с которыми я пытался связаться за пределами приложения Heroku terminal: Navicat и IntelliJ.

ошибка, которую я получаю в Navicat при попытке подключиться к базе данных:

could not connect to server: Host is down Is the server running on host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting TCP/IP connections on port 5432?

Мои настройки подключения следующие:

Имя Подключения Heroku Dev Test

имя хоста/IP-адрес ec2-107-21-112-215.compute-1.amazonaws.com

порт 5432

Navicat, похоже, даже не пытается подключиться к этому имя хоста.

когда я пытаюсь подключиться к IntelliJ, используя полные учетные данные, я получаю следующую ошибку:

java.sql.SQLException: FATAL: no pg_hba.conf entry for host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off

опять же, я использую учетные данные, которые приложение Heroku предоставляет мне при доступе к моей базе данных на своем веб-сайте.

кто-нибудь сталкивался с этой проблемой соединения Heroku раньше?

7 ответов


Heroku предоставляет эту информацию для подключения из внешних источников:

https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress

второе сообщение об ошибке указывает, что PostgreSQL не настроен для принятия соединения, которое вы пытаетесь сделать. Учитывая информацию Heroku, можно предположить, что вы не подключаетесь к SSL. Попробуйте включить это в своем соединении.

здесь инструкции для использования SSL с Navicat: http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html.

Это может быть полезно при настройке Intellij для использования SSL: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely.


у меня также была проблема с FATAL: no pg_hba.conf entry for host сообщение об ошибке.

я решил проблему подключения к моей базе данных Heroku Postgres, добавив в строку JDBC следующее:&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory.

пример

jdbc:postgresql://host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

вам понадобится опция SSL, только если SSL включен для вашей базы данных Postgres (которая по умолчанию).

подсказка

если вы хотите проверить свои свойства подключения к базе данных, просто запустите следующая команда с Heroku Toolbelt: heroku pg:info --app your-heroko-appname (убедитесь, что у вас есть Postgres, чтобы запустить эту команду в вашем терминале)

на также скажет вам, что sslmode установлено значение require.

для проверки подключения к базе данных я рекомендую SQL Power Architect как это инструмент, который я использовал для проверки своего решения.


IntelliJ - > источники данных и драйверы

после настройки хоста, базы данных и сведений о пользователе в разделе General tab переключиться на Advanced tab и убедитесь, что вы добавили следующее:

  • ssl = true
  • sslfactory = org.в PostgreSQL.использование SSL.NonValidatingFactory

enter image description here


хотел помочь другим, которые могут столкнуться с этим. Если вы предоставляете имя пользователя и пароль в отдельных областях, а не в командной строке, вы должны использовать ? между именем базы данных и ssl=true и отбросьте первый &

jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

это командная строка, которая, наконец, позволила мне подключиться к базе данных PostgreSQL с помощью SQL Power Architect


для тех, кто может использовать Spring Boot и иметь конфигурацию, предоставленную через DATABASE_URL свойство среды (не системное свойство), суффикс может быть добавлен к свойству:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

и прошел через с небольшой модификацией в config bean:

@Bean
public BasicDataSource dataSource() throws URISyntaxException {

    URI dbUri = new URI(System.getenv("DATABASE_URL"));
    String username = dbUri.getUserInfo().split(":")[0];
    String password = dbUri.getUserInfo().split(":")[1];

    StringBuilder dbUrl = new StringBuilder(128);
    dbUrl.append("jdbc:postgresql://")
            .append(dbUri.getHost()).append(":")
            .append(dbUri.getPort())
            .append(dbUri.getPath());

    String query = dbUri.getQuery();
    if (null != query && !query.isEmpty()) {
        dbUrl.append("?").append(query);
    }

    BasicDataSource basicDataSource = new BasicDataSource();
    basicDataSource.setUrl(dbUrl.toString());
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);

    return basicDataSource;
}

вы можете рассмотреть возможность установки переменной конфигурации среды "PGSSLMODE" в "require" через веб-интерфейс Heroku или CLI.

Case: Postgres dB настроен как дополнение Heroku и прикреплен к приложению на Heroku Dyno.

в Heroku - инструкции к сожалению, не упоминайте о том, как активировать SSL, хотя это требуется для любого уровня БД, начиная со Standard-0 по умолчанию.

выполните все шаги PG-copy или PG-upgrade (предпочтительно подход зависит от вашей версии Postgres) в инструкциях Heroku; однако перед выводом из эксплуатации старой базы данных (если это необходимо) -- добавьте переменную среды PGSSLMODE.

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


добавьте или отредактируйте следующую строку в postgresql.файл conf :

listen_addresses = '*'

добавьте следующую строку в качестве первой строки в файле pg_hba.conf. Это позволяет получить доступ ко всем базам данных для всех пользователей с зашифрованным паролем:

TYPE DATABASE USER CIDR-ADDRESS  METHOD

host  all  all 0.0.0.0/0 md5

перезапустить службу postgresql:

net stop postgresql-9.0 & net start postgresql-9.0 

(версия должна основываться на вашей установке) -- на windows (запустите cmd как администратор).

sudo service start postgresql -- On linux (or according to your linux distribution.)