Today I’m planning on deploying my application (which runs well on my local laptop), to a production server. But there is a very weird error occur, it says
Caused by: org.postgresql.util.PSQLException: ERROR: Unsupported startup parameter: extra_float_digits at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:291) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:108) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125) at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
Somehow it seems that the error happen because of some wrong PostgreSql JDBC version. But the error stays even if I changed my Postgresql JDBC version several times. So my temporary conclusion is, improper Postgresql configuration.
After debating with several sysadmins and DBA, i found out that my sql connection actually goes to a Connection Pooling called PGBouncer, instead of connecting directly to Postgresql. Weird, because i also using Connection Pooling (Apache DBCP) for my application. So it means that my app is using a double connection pooling 😀
After spending sometime googling, i found out that all i need to do is adding this simple configuration on pgbouncer.ini
ignore_startup_parameters = extra_float_digits
hint :
If your are unable to found the location for pgbouncer.ini, just using a simple ps -ef command on console.
bash-4.1$ ps -ef | grep pgbouncer 500 18927 1 0 May30 ? 00:00:00 /opt/PostgresPlus/pgbouncer-1.6/bin/pgbouncer -d /opt/PostgresPlus/pgbouncer-1.6/share/pgbouncer.ini 500 19045 18913 0 00:11 pts/4 00:00:00 grep pgbouncer
As you can see, the pgbouncer.ini location is in /opt/PostgresPlus/pgbouncer-1.6/share/.
Well, one thing solve, and suddenly i found another error :sigh. So many errors today. Here is my complete stacktrace
org.postgresql.util.PSQLException: ERROR: No such database: mydatabase at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:291) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:108) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125) at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30) at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22) at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:30)
Somehow i cannot find mydatabase, despite i already created it.
Actually, the answer is simple. Again pgbouncer is the culprit. I cannot connect to a database if the database havent registered yet at pgbouncer.ini. Registering my database solve this issue.
;; database name = connect string ;; ;; connect string params: ;; dbname= host= port= user= password= ;; client_encoding= datestyle= timezone= ;; pool_size= connect_query= [databases] ; foodb over unix socket edb = host=127.0.0.1 port=5444 mydatabase = host=127.0.0.1 port=5444
You can see my PostgreSQL’s port is 5444.
Hopefully, my tutorial helps other. Because i spent a ridiculously amount of time solving it 😀
thank you
Thank’s a lot!