0
votes

I am upgrading my heroku database from a hobby dev to Standard 0 (using the official instructions https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases#upgrade-with-pg-copy-default).

All went well, until I promoted the new database and restarted the app. I then get the following error:

o.s.boot.SpringApplication               : Application startup failed
...
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
...
Caused by: org.flywaydb.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
...
Caused by: org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "54.xxx.xx.xxx", user "u94bf9vxxxxxx", database "d2mqk0b6xxxxxx", SSL off
...

If I swap back to the old database again, everything works again. The only thing that I am changing is the promoted database.

Is there a difference between connecting to hobby and standard databases that I need to be aware of?

The relevant part of my application.yml looks as follows:

spring:
    datasource:
        driverClassName: org.postgresql.Driver
        url: ${JDBC_DATABASE_URL} 
        username: ${JDBC_DATABASE_USERNAME}
        password: ${JDBC_DATABASE_PASSWORD}
flyway:
    enabled: true
    locations: classpath:db/migrations

Any suggestions on how I can debug this would be very welcome too.

1
Can't say I've used Heroku lately, but do you have access pg_hba.conf ? If so please provide it's contents which would certainly help isolate the problem. - markdsievers
Unfortunately not, this is hidden, and not editable. - Tom G

1 Answers

3
votes

Looks like you aren't connecting with SSL where it is required by Heroku PostgreSQL installs.

See Herokus documentation on SSL for PostgreSQL.

See also Herokus documentation for enabling SSL on JDBC connections.

You will need to add something like &ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory to your JDBC URL.