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.