Solución:
Es problema de Heroku. La variable “process.env.DATABASE_URL” que le dicen que use en pg.connect no está funcionando.
Un simple
console.log(process.env.DATABASE_URL);
Mostrará que esta variable no está definida.
Hasta que Heroku ofrezca una solución, puede codificar la URL de conexión como primer argumento para pg.connect ().
Para encontrar sus credenciales, puede ir a la configuración de conexión del complemento PostgreSQL de su aplicación a través de http://heroku.com.
El nuevo método pg.connect se verá así
var connectionString = "postgres://*USERNAME*:*PASSWORD*@*HOST*:*PORT*/*DATABASE*"
pg.connect(connectionString, function(err, client, done) {
client.query('SELECT * FROM your_table', function(err, result) {
done();
if(err) return console.error(err);
console.log(result.rows);
});
});
Si las respuestas anteriores son un poco cortas para alguien (lo hicieron para mí), intente agregar ?ssl=true
al final de su variable de entorno DATABASE_URL. Crédito al autor de esta respuesta. La mejor de las suertes.
Puedes usar: heroku pg:info
comando para enumerar todas sus bases de datos. Allí encontrará la URL de base de datos exacta que puede usar en su aplicación; debería ser algo así: HEROKU_POSTGRESQL_DBNAME_URL
. Esta URL se puede utilizar en la aplicación node.js:
pg.connect(process.env.HEROKU_POSTGRESQL_DBNAME_URL, function(err, client, done) {
client.query('SELECT * FROM your_table', function(err, result) {
done();
if(err) return console.error(err);
console.log(result.rows);
});
});