tutorial pricing postgres example heroku heroku-postgres

pricing - heroku postgresql add on



Propiedades de conexión de la base de datos Heroku (7)

Estoy tratando de realizar una tarea relativamente trivial: quiero conectarme a una base de datos Heroku. Creé la base de datos y obtuve las credenciales del sitio de Heroku. Sin embargo, cuando trato de conectarme a esta base de datos usando cualquier cosa que no sea el cliente de la línea de comandos del terminal ''heroku'', recibo errores fatales o no puedo conectar los errores.

Las dos herramientas con las que intenté conectarme fuera de la aplicación de la terminal Heroku son: Navicat e IntelliJ.

El error que recibo en Navicat cuando trato de conectarme a la base de datos es:

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?

Mi configuración de conexión es la siguiente:

Nombre de la conexión Heroku Dev Test

Nombre de host / dirección IP ec2-107-21-112-215.compute-1.amazonaws.com

Puerto 5432

Navicat ni siquiera parece estar intentando conectarse a ese nombre de host.

Cuando trato de conectarme con IntelliJ, usando las credenciales completas, aparece el siguiente error:

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

Una vez más, estoy usando las credenciales que la aplicación Heroku me proporciona al acceder a mi base de datos en su sitio web.

¿Alguien se ha encontrado con este problema de conexión con Heroku antes?


Agregue o edite la siguiente línea en su archivo postgresql.conf:

listen_addresses = ''*''

Agregue la siguiente línea como la primera línea de pg_hba.conf. Permite el acceso a todas las bases de datos para todos los usuarios con una contraseña encriptada:

TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 0.0.0.0/0 md5

Reinicie el servicio postgresql:

net stop postgresql-9.0 & net start postgresql-9.0

(la versión debe estar basada en su instalación) - En Windows (ejecute cmd como administrador).

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


Heroku proporciona esta información para conectarse desde fuentes externas:

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

El segundo mensaje de error indica que PostgreSQL no está configurado para aceptar la conexión que intentas hacer. Dada la información que proporciona Heroku, una buena suposición es que no se está conectando con SSL. Intenta habilitar eso en tu conexión.

Aquí hay instrucciones para usar SSL con Navicat: http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html .

Esto puede ser útil para configurar Intellij para usar SSL: https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely .


Para aquellos que puedan estar usando Spring Boot y que tengan la configuración proporcionada a través de la propiedad de entorno DATABASE_URL (no propiedad del sistema), el sufijo se puede agregar a la propiedad:

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

y transmitido con una ligera modificación al 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; }


Puede considerar configurar un ENTORNO CONFIG VARIABLE ''PGSSLMODE'' para ''requerir'' a través de la interfaz web de Heroku o CLI.

Caso: DB de Postgres configurado como un complemento de Heroku y adjunto a la aplicación en un Heroku Dyno.

Desafortunadamente, las instructions de Heroku omiten mencionar cómo activar SSL, aunque es obligatorio para cualquier nivel de dB que comience por Estándar-0 de forma predeterminada.

Siga todos los pasos de pg-copy o pg-upgrade (el enfoque preferido depende de su versión de Postgres) en las instrucciones de Heroku; sin embargo, antes de desmantelar la base de datos anterior (si corresponde), agregue la variable de entorno PGSSLMODE.

Las instrucciones cubren suficientemente cómo promover la nueva base de datos (y, en consecuencia, establecer el DATABASE_URL), por lo que no se requieren cambios / modificaciones en ellos .


Quería ayudar a otros que podrían toparse con esto. Si está suministrando el nombre de usuario y la contraseña en campos separados en lugar de en la línea de comando, ¿necesita usar un? entre el nombre de la base de datos y ssl = true y descartar el primero y

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

Esa es la línea de comandos que finalmente me permitió conectarme a una base de datos PostgreSQL usando SQL Power Architect


También tuve el problema con FATAL: no pg_hba.conf entry for host mensaje de error del FATAL: no pg_hba.conf entry for host .

Resolví el problema de conexión a mi base de datos Postgres de Heroku agregando lo siguiente a mi cadena JDBC: &ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory .

Ejemplo

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

Necesitará la opción SSL solo si SSL está habilitado para su base de datos Postgres (que es la predeterminada).

Insinuación

Si desea verificar las propiedades de conexión de su base de datos, simplemente ejecute el siguiente comando con Heroku Toolbelt : heroku pg:info --app your-heroko-appname (asegúrese de tener Postgres insalled para ejecutar este comando en su terminal)

El comando pg:info también le dirá que sslmode está configurado para require .

Para probar la conexión a la base de datos, recomiendo SQL Power Architect, ya que es la herramienta que estaba usando para verificar mi solución.


IntelliJ -> Fuentes de datos y controladores

Una vez que haya configurado el host, la base de datos y los detalles del usuario en la pestaña General cambie a la pestaña Advanced y asegúrese de haber agregado lo siguiente:

  • ssl = cierto
  • sslfactory = org.postgresql.ssl.NonValidatingFactory