Подтвердить что ты не робот

Свойства подключения базы данных Heroku

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

Два инструмента, с которыми я пытался подключиться за пределами терминального приложения Heroku: 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 раньше?

4b9b3361

Ответ 1

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.

Ответ 2

У меня также возникла проблема с сообщением об ошибке 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 (make убедитесь, что у вас есть Postgres, чтобы не запускать эту команду в своем терминале)

Команда pg:info также сообщит вам, что для параметра sslmode установлено значение require.

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

Ответ 3

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

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

  • ssl = правда
  • sslfactory = org.postgresql.ssl.NonValidatingFactory
  • sslmode = требуется

enter image description here

Ответ 4

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

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

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

Ответ 5

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

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

и прошел через небольшую модификацию конфигурации 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;
}

Ответ 6

Возможно, вы захотите установить переменную ENVIRONMENT CONFIG 'PGSSLMODE' на 'require' через веб-интерфейс Heroku или интерфейс командной строки.

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

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

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

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

Ответ 7

Добавьте или отредактируйте следующую строку в файле 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.) 

Ответ 8

Я использую node.js и пытался запустить миграцию knex для моего приложения Heroku. Я попытался добавить ?sslmode=require к URL-адресу соединения, но это не сработало. Вместо этого я добавил ?ssl=true и теперь он работает отлично.

Вот пример URL-адреса соединения Heroku PostgreSQL, который работает:

postgres://user:[email protected]:port/databasename?ssl=true

Ответ 9

Я дал ответ на этот вопрос, включая все другие технологии для удаленного подключения к базе данных Heroku.

Перейдите по ссылке.