Обсуждение: Binary transfer not working

Поиск
Список
Период
Сортировка

Binary transfer not working

От
Alex Ignatov
Дата:
Hello!
Im testing jdbc binary transfer mode but i can't make it works as it should.
Network packet dump always shows me that for example "dtrntran" TIMESTAMP column is transfering in text and not in binary representation as it should.
Debug log shows me that binary mode is on, but regardless org.postgresql.forceBinary=false/true it is always text.
What am i doing wrong?
jdbc version -  postgresql-9.4-1201.jdbc4.jar
postgresql version - 9.4.1
This is my test code. javac vm arguments is  -Dorg.postgresql.forceBinary=true

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.sql.Statement;
import java.sql.Timestamp;

public class TestMe {
    private static java.sql.Timestamp getCurrentTimeStamp() {

        java.util.Date today = new java.util.Date();
        return new java.sql.Timestamp(today.getTime());

    }

    public static void main(String[] args) throws SQLException {

        String url = "jdbc:postgresql://thunder:5432/test";
        Connection conn = null;
        org.postgresql.Driver.setLogLevel(org.postgresql.Driver.DEBUG);

        Properties connectionProps = new Properties();
        connectionProps.put("user", "***");
        connectionProps.put("password", "***");
        connectionProps.put("loglevel", "2");
        conn = DriverManager.getConnection(url, connectionProps);
        select(conn);
    }

    private static void select(Connection conn) {
        try {
            PreparedStatement fs = conn.prepareStatement("SELECT dtrntran FROM trn order by itrnnum limit 1");
            ResultSet rs = fs.executeQuery();
            for (int i = 0; i < 1; i++) {
                rs.next();
            }
            rs.close();
            System.out.println("org.postgresql.forceBinary= "
                    + Boolean.getBoolean("org.postgresql.forceBinary"));
        } catch (SQLException e) {
        }

    }
}


Re: Binary transfer not working

От
Dave Cramer
Дата:
Can you show me the definition of the table please ?

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca

On 6 April 2015 at 10:38, Alex Ignatov <alexign@gmail.com> wrote:
Hello!
Im testing jdbc binary transfer mode but i can't make it works as it should.
Network packet dump always shows me that for example "dtrntran" TIMESTAMP column is transfering in text and not in binary representation as it should.
Debug log shows me that binary mode is on, but regardless org.postgresql.forceBinary=false/true it is always text.
What am i doing wrong?
jdbc version -  postgresql-9.4-1201.jdbc4.jar
postgresql version - 9.4.1
This is my test code. javac vm arguments is  -Dorg.postgresql.forceBinary=true

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.sql.Statement;
import java.sql.Timestamp;

public class TestMe {
    private static java.sql.Timestamp getCurrentTimeStamp() {

        java.util.Date today = new java.util.Date();
        return new java.sql.Timestamp(today.getTime());

    }

    public static void main(String[] args) throws SQLException {

        String url = "jdbc:postgresql://thunder:5432/test";
        Connection conn = null;
        org.postgresql.Driver.setLogLevel(org.postgresql.Driver.DEBUG);

        Properties connectionProps = new Properties();
        connectionProps.put("user", "***");
        connectionProps.put("password", "***");
        connectionProps.put("loglevel", "2");
        conn = DriverManager.getConnection(url, connectionProps);
        select(conn);
    }

    private static void select(Connection conn) {
        try {
            PreparedStatement fs = conn.prepareStatement("SELECT dtrntran FROM trn order by itrnnum limit 1");
            ResultSet rs = fs.executeQuery();
            for (int i = 0; i < 1; i++) {
                rs.next();
            }
            rs.close();
            System.out.println("org.postgresql.forceBinary= "
                    + Boolean.getBoolean("org.postgresql.forceBinary"));
        } catch (SQLException e) {
        }

    }
}



Re: Binary transfer not working

От
Dave Cramer
Дата:
Alex,

You are not doing anything wrong. Turns out forceBinaryTransfer doesn't work because:

public void setPrepareThreshold(int newThreshold) throws SQLException {

        checkClosed();  

        if (newThreshold < 0) {

            forceBinaryTransfers = true;

            newThreshold = 1;

        }

        else

            forceBinaryTransfers = false;

        this.m_prepareThreshold = newThreshold;

    }

I'm trying to figure out if we should ever reset forceBinaryTransfers

I removed the line in italics above in the snapshot https://oss.sonatype.org/content/repositories/snapshots/org/postgresql/postgresql/9.4-1201-jdbc41-SNAPSHOT/


Let me know if that works


Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca

On 6 April 2015 at 10:38, Alex Ignatov <alexign@gmail.com> wrote:
Hello!
Im testing jdbc binary transfer mode but i can't make it works as it should.
Network packet dump always shows me that for example "dtrntran" TIMESTAMP column is transfering in text and not in binary representation as it should.
Debug log shows me that binary mode is on, but regardless org.postgresql.forceBinary=false/true it is always text.
What am i doing wrong?
jdbc version -  postgresql-9.4-1201.jdbc4.jar
postgresql version - 9.4.1
This is my test code. javac vm arguments is  -Dorg.postgresql.forceBinary=true

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.sql.Statement;
import java.sql.Timestamp;

public class TestMe {
    private static java.sql.Timestamp getCurrentTimeStamp() {

        java.util.Date today = new java.util.Date();
        return new java.sql.Timestamp(today.getTime());

    }

    public static void main(String[] args) throws SQLException {

        String url = "jdbc:postgresql://thunder:5432/test";
        Connection conn = null;
        org.postgresql.Driver.setLogLevel(org.postgresql.Driver.DEBUG);

        Properties connectionProps = new Properties();
        connectionProps.put("user", "***");
        connectionProps.put("password", "***");
        connectionProps.put("loglevel", "2");
        conn = DriverManager.getConnection(url, connectionProps);
        select(conn);
    }

    private static void select(Connection conn) {
        try {
            PreparedStatement fs = conn.prepareStatement("SELECT dtrntran FROM trn order by itrnnum limit 1");
            ResultSet rs = fs.executeQuery();
            for (int i = 0; i < 1; i++) {
                rs.next();
            }
            rs.close();
            System.out.println("org.postgresql.forceBinary= "
                    + Boolean.getBoolean("org.postgresql.forceBinary"));
        } catch (SQLException e) {
        }

    }
}