Postgres driver bug

From: Nikos Viorres <nviorres(at)gmail(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Postgres driver bug
Date: 2015-02-06 08:57:09
Message-ID: CAHSf1Y2xfcEk8zAyBaQ8Ma7z-=ZEEheMX7TLgR5+jX7VJq6CJQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Hi,

The attached simple piece of code results always in a the driver going into
a wait state that never receives a wake up signal and by looking at the
code, even if it does it will loop again into the same wait state. If
anyone else thinks this is a problem i could provide a fix

regards

package nvrs.test;

import org.postgresql.PGConnection;
import org.postgresql.copy.PGCopyInputStream;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
* Date: 5/2/2015
*/
public class PostgresDriverBug {

public static void main(String...args) throws SQLException {
PostgresConnectionFactory connectionFactory
= new PostgresConnectionFactory("localhost", 5432, "postgres",
"postgres", "postgres");

Connection con = connectionFactory.getNewConnection();

try (InputStream is = getPostgresInputStream("select * from
public.some_table", con);
OutputStream os = getOutputStream()) {

final byte[] buffer = new byte[1024 * 4];
int read = is.read(buffer);

while (read > 0) {
os.write(buffer, 0, read);
read = is.read(buffer);
}

} catch (IOException e) {
System.err.println("Something bad happened " + e.getMessage());

con.rollback();
}

System.out.println("Done!");
}

private static OutputStream getOutputStream() throws IOException {
throw new FileNotFoundException("ooops");
}

private static InputStream getPostgresInputStream(String selectQuery,
Connection con)
throws SQLException {

return new PGCopyInputStream(PGConnection.class.cast(con),
"COPY (" + selectQuery +") TO STDOUT");
}

public static class PostgresConnectionFactory {
private final String host;
private final int port;
private final String database;
private final String user;
private final String password;

public PostgresConnectionFactory(final String host, final int port,
final String database,
final String user, final String
password) {
this.host = host;
this.port = port;
this.database = database;
this.user = user;
this.password = password;
}

private String getConnectionUrl() {
return "jdbc:postgresql://" + host + ":" + port + "/" + database;
}

public Connection getNewConnection() throws SQLException {
Connection con = DriverManager.getConnection(getConnectionUrl(),
user,
password);

con.setAutoCommit(false);
return con;
}
}

}

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2015-02-06 13:23:39 Re: Postgres driver bug
Previous Message Dave Cramer 2015-02-04 18:14:53 Re: Dependencies in pom.xml of driver version 9.4-1200-jdbc41