Re: problem: query result in jdbc is <> result in psql

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Joseph Shraibman <jks(at)selectacast(dot)net>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: problem: query result in jdbc is <> result in psql
Date: 2012-01-09 12:08:52
Message-ID: CADK3HHKe-yGSsfKAVEyL5rm+5x=iecVsuDWU5q7to7sCZUG8Lg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Joseph,

I just tried your code using the latest driver and pg 8.4 and 9.1 it
works fine. What version of the server are you using ?

relname locktype database relation page tuple virtualxid transactionid classid objid objsubid virtualtransaction pid mode granted
-------------------------
a relation 16385 16392 null null null null null null null 2/15 2392 RowShareLock true
null virtualxid null null null null 2/15 null null null null 2/15 2392 ExclusiveLock true
pg_class relation 16385 1259 null null null null null null null 3/11 2468 AccessShareLock true
pg_class_oid_index relation 16385 2662 null null null null null null null 3/11 2468 AccessShareLock true
pg_class_relname_nsp_index relation 16385 2663 null null null null null null null 3/11 2468 AccessShareLock true
pg_locks relation 16385 11000 null null null null null null null 3/11 2468 AccessShareLock true
null virtualxid null null null null 3/11 null null null null 3/11 2468 ExclusiveLock true

Dave Cramer

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

On Sun, Jan 8, 2012 at 7:43 PM, Joseph Shraibman <jks(at)selectacast(dot)net> wrote:
> The equivalent java code:
>
> import java.sql.*;
>
> class PgTest{
>
>    public static void main(String[] args)throws Exception{
>        Class.forName("org.postgresql.Driver");
>        String url="jdbc:postgresql://localhost/template1";
>        String usr = "jks";
>        Statement st = DriverManager.getConnection(url,
> usr,"").createStatement();
>        String sql = "SELECT (select relname from pg_catalog.pg_class where
> pg_catalog.pg_class.oid = relation) as relname, * FROM pg_locks ORDER BY
> pid, relation;";
>        ResultSet rs = st.executeQuery(sql);
> int cols = rs.getMetaData().getColumnCount();
>
>        for(int colnum = 1; colnum <= cols ; colnum++)
>            System.out.print(rs.getMetaData().getColumnLabel(colnum) + "\t");
>
>        System.out.println();
>        System.out.println("-------------------------");
>
>        while(rs.next()){
>            for(int colnum = 1; colnum <= cols ; colnum++)
>                System.out.print( rs.getObject(colnum) + "\t");
>            System.out.println();
>        }
>
>    }
> }
>
> produces:
>
> [jks(at)jks-desktop /tmp]{f15}$ javac PgTest.java && java -cp
> ~/.ivy2/cache/postgresql/postgresql/jars/postgresql-9.1-901.jdbc4.jar:.
> PgTest
>
> relname locktype        database        relation        page    tuple
> virtualxid      transactionid   classid objid   objsubid
>  virtualtransaction      pid     mode    granted
> -------------------------
> null    relation        16384   16406   null    null    null    null    null
>    null    null    2/19    7613    AccessExclusiveLock     true
> null    virtualxid      null    null    null    null    2/19    null    null
>    null    null    2/19    7613    ExclusiveLock   true
> null    relation        16384   16406   null    null    null    null    null
>    null    null    4/43    7796    AccessExclusiveLock     false
> null    virtualxid      null    null    null    null    4/43    null    null
>    null    null    4/43    7796    ExclusiveLock   true
> pg_class        relation        1       1259    null    null    null    null
>    null    null    null    3/2656  22125   AccessShareLock true
> pg_class_oid_index      relation        1       2662    null    null    null
>    null    null    null    null    3/2656  22125   AccessShareLock true
> pg_class_relname_nsp_index      relation        1       2663    null    null
>    null    null    null    null    null    3/2656  22125   AccessShareLock
> true
> pg_locks        relation        1       11000   null    null    null    null
>    null    null    null    3/2656  22125   AccessShareLock true
> null    virtualxid      null    null    null    null    3/2656  null    null
>    null    null    3/2656  22125   ExclusiveLock   true
>
>
>
> On 01/08/2012 07:12 PM, Joseph Shraibman wrote:
>>
>> I'm working on some code that reads info from the pg lock table.
>>
>>
>> jks=# SELECT (select relname from pg_catalog.pg_class where
>> pg_catalog.pg_class.oid = relation) as relname, * FROM pg_locks ORDER BY
>> pid, relation;
>>          relname           |  locktype  | database | relation | page |
>> tuple | virtualxid | transactionid | classid | objid | objsubid |
>> virtualtransaction |  pid  |        mode         | granted
>>
>> ----------------------------+------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-------+---------------------+---------
>>  a                          | relation   |    16384 |    16406 |      |
>>     |            |               |         |       |          | 2/19
>>       |  7613 | AccessExclusiveLock | t
>>                            | virtualxid |          |          |      |
>>   | 2/19       |               |         |       |          | 2/19
>>     |  7613 | ExclusiveLock       | t
>>  a                          | relation   |    16384 |    16406 |      |
>>     |            |               |         |       |          | 4/43
>>       |  7796 | AccessExclusiveLock | f
>>                            | virtualxid |          |          |      |
>>   | 4/43       |               |         |       |          | 4/43
>>     |  7796 | ExclusiveLock       | t
>>  pg_class                   | relation   |    16384 |     1259 |      |
>>     |            |               |         |       |          | 16/13
>>        | 20847 | AccessShareLock     | t
>>  pg_class_oid_index         | relation   |    16384 |     2662 |      |
>>     |            |               |         |       |          | 16/13
>>        | 20847 | AccessShareLock     | t
>>  pg_class_relname_nsp_index | relation   |    16384 |     2663 |      |
>>     |            |               |         |       |          | 16/13
>>        | 20847 | AccessShareLock     | t
>>  pg_locks                   | relation   |    16384 |    11000 |      |
>>     |            |               |         |       |          | 16/13
>>        | 20847 | AccessShareLock     | t
>>                            | virtualxid |          |          |      |
>>   | 16/13      |               |         |       |          | 16/13
>>      | 20847 | ExclusiveLock       | t
>> (9 rows)
>>
>> In this example I tried to lock the 'a' table in two different psql
>> windows.
>> The works fine in psql. However when I run the query in jdbc I don't see
>> the 'a's.
>>
>> I ran this script with
>>
>>  scala -cp
>> ~/.ivy2/cache/postgresql/postgresql/jars/postgresql-9.1-901.jdbc4.jar <
>> /tmp/pgjdbc.scala
>>
>>
>> import java.sql._
>> Class.forName("org.postgresql.Driver")
>> val url="jdbc:postgresql://localhost/template1"
>> val usr = "jks"
>> val conn = DriverManager.getConnection(url, usr,"")
>> val st = conn.createStatement
>> val sql = "SELECT (select relname from pg_catalog.pg_class where
>> pg_catalog.pg_class.oid = relation) as relname, * FROM pg_locks ORDER BY
>> pid, relation;"
>> val rs = st.executeQuery(sql)
>> val cols = rs.getMetaData().getColumnCount();
>>
>>  for(colnum <- 1 to cols)
>>     print(rs.getMetaData().getColumnLabel(colnum) + "\t")
>> println("-------------------------")
>>
>> while(rs.next){
>>   for(colnum <- 1 to cols)
>>      print( rs.getObject(colnum) + "\t")
>>   println
>> }
>>
>> The output is:
>>
>> null    relation        16384   16406   null    null    null    null
>>  null    null    null    2/19    7613    AccessExclusiveLock     true
>> null    virtualxid      null    null    null    null    2/19    null
>>  null    null    null    2/19    7613    ExclusiveLock   true
>> null    relation        16384   16406   null    null    null    null
>>  null    null    null    4/43    7796    AccessExclusiveLock     false
>> null    virtualxid      null    null    null    null    4/43    null
>>  null    null    null    4/43    7796    ExclusiveLock   true
>> pg_class        relation        1       1259    null    null    null
>>  null    null    null    null    17/462  21265   AccessShareLock true
>> pg_class_oid_index      relation        1       2662    null    null
>>  null    null    null    null    null    17/462  21265   AccessShareLock
>> true
>> pg_class_relname_nsp_index      relation        1       2663    null
>>  null    null    null    null    null    null    17/462  21265
>> AccessShareLock true
>> pg_locks        relation        1       11000   null    null    null
>>  null    null    null    null    17/462  21265   AccessShareLock true
>> null    virtualxid      null    null    null    null    17/462  null
>>  null    null    null    17/462  21265   ExclusiveLock   true
>>
>> notice that there is only 'null' in the left column where 'a's should be.
>>
>> Both psql and jdbc were connecting using the same user, 'jks'.  The pg
>> version is: PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc
>> (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9), 64-bit
>>
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Radosław Smogura 2012-01-09 13:55:50 Re: Binary Large Objects (LOB/BLOB) in Hibernate and JDBC: Unresolved issues
Previous Message Oliver Jowett 2012-01-09 11:41:27 Re: Binary Large Objects (LOB/BLOB) in Hibernate and JDBC: Unresolved issues