views:

106

answers:

2

I am using jdbc to connect to a postgresql database in a java application (actually the app is written in Groovy). I have postgresql set up to use the 'trust' authentication method. Is it possible to open a jdbc connection without specifying a password? When I try to use the normal constructor with a blank password, it fails with

Exception in thread "Thread-2" org.postgresql.util.PSQLException: FATAL: password authentication failed for user "myuser"

Even though, from the command line, this works fine

psql -U myuser mydatabase
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
      \h for help with SQL commands
      \? for help with psql commands
      \g or terminate with semicolon to execute query
      \q to quit
+1  A: 

Yes, you can.

Note that Postres JDBC driver always uses IP sockets (host in pg_hba.conf), even if database is on the local machine, then psql can use local sockets (local in pg_hba.conf). So, if psql works with trust authentication and JDBC doesn't, you probably should configure trust authentication for IP sockets, see documentation.

axtavt
Thanks for the link. So can I use the normal jdbc constructor and just pass in a blank password?
mojones
Yes, you can. It works if Postgres is properly configured.
axtavt
A: 

Already answered but:

When you connect using the psql client program, and don't specify a host (-h), the default is to use a local socket. In JDBC, instead, you will use a TCP/IP socket. Then, to check your connection problem you should invoke psql with the same settings you are using in JDBC, host included.

For example

 psql -U myuser -h 127.0.0.1 mydatabase    # uses TCP/IP

Which is not the same as

 psql -U myuser mydatabase      # uses local socket (non TCP/IP)
leonbloy