Search code examples
javapostgresqljdbc

Does the Postgresql JDBC Driver support Pgpass authentication?


I am trying to connect to a Postgresql database from Java using the JDBC Driver and would like to use pgpass to authenticate.

My Postgresql server is correctly setup for password authentication and I have a local .pgpass file; I can connect using psql without having to provide the user's password. However, when I try to open a connection in Java, I get the following error:

org.postgresql.util.PSQLException: The server requested password-based authentication, but no password was provided.

I am using the following code:

String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user","my_user");
Connection conn = DriverManager.getConnection(url, props);

My question is then: does the Postgres JDBC Driver support pgpass?

The only clue I could find is in SO and seems to indicate that since the driver does not use libpq, then it cannot use pgpass. I can't seem to find an authoritave answer anywhere though.


Solution

  • No, PgJDBC doesn't read .pgpass.

    $ cd projects/pgjdbc
    $ git grep pgpass
    $ 
    

    Your Java program would need to open and parse .pgpass then do appropriate matching for the connection.

    If you write a class to read and parse .pgpass and to match it for a given set of connection parameters, please submit it for inclusion in the PgJDBC driver, where it'd go under the package org.postgresql.util.

    You might find it easier to instead modify the JDBC driver directly, looking up the password if none is specified in the connection parameters once the JDBC driver has already parsed the JDBC URL into host, port, etc.