Thread: I can't get the database's list

I can't get the database's list

From
miguel manzano
Date:
I try to obtain the database's list in my instalation but when I use :

 System.out.println("Driver : ");
         System.out.println("   " + md.getDatabaseProductName() );
         System.out.println("   " + md.getDatabaseProductVersion() );
         ResultSet catalogRs = md.getCatalogs();

         while ( catalogRs.next() ){

            System.out.println("Catalog " + catalogRs.getString(1));
            ResultSet tableRs =
md.getTables(catalogRs.getString(1),"%","%",(String []) null);
            }
        }
I just got only the name of the database at I have conected but the
another databases didn't figure in the list.
But if I use :
psql template1 -c "select datname from pg_catalog.pg_database"
I can see all databases in my machine.
I have read documentation but I haven't found where is the problem
please I need help about this topic
Thanks for all
Miguel Manzano
miguel.miguelmanzano@gmail.com-


Re: I can't get the database's list

From
Kris Jurka
Date:

On Tue, 8 Jun 2010, miguel manzano wrote:

> I try to obtain the database's list in my instalation but when I use :
>
> System.out.println("Driver : ");
>         System.out.println("   " + md.getDatabaseProductName() );
>         System.out.println("   " + md.getDatabaseProductVersion() );
>         ResultSet catalogRs = md.getCatalogs();
>
>         while ( catalogRs.next() ){
>
>            System.out.println("Catalog " + catalogRs.getString(1));
>            ResultSet tableRs =
> md.getTables(catalogRs.getString(1),"%","%",(String []) null);
>            }
>        }
> I just got only the name of the database at I have conected but the
> another databases didn't figure in the list.

The JDBC driver avoids returning all the databases on the server because
it cannot access them.  It can only access the current database so that is
all it returns from getCatalogs.  We made this decision intentionally to
handle the exact situation that your next getTables call reveals.  If we
returned other databases in getCatalogs, people would try to use them in
other database metadata calls which would not work.

Kris Jurka


Re: I can't get the database's list

From
Craig Ringer
Date:
On 09/06/10 14:09, Kris Jurka wrote:
>
>
> On Tue, 8 Jun 2010, miguel manzano wrote:
>
>> I try to obtain the database's list in my instalation but when I use :
>>
>> System.out.println("Driver : ");
>>         System.out.println("   " + md.getDatabaseProductName() );
>>         System.out.println("   " + md.getDatabaseProductVersion() );
>>         ResultSet catalogRs = md.getCatalogs();
>>
>>         while ( catalogRs.next() ){
>>
>>            System.out.println("Catalog " + catalogRs.getString(1));
>>            ResultSet tableRs =
>> md.getTables(catalogRs.getString(1),"%","%",(String []) null);
>>            }
>>        }
>> I just got only the name of the database at I have conected but the
>> another databases didn't figure in the list.
>
> The JDBC driver avoids returning all the databases on the server because
> it cannot access them.  It can only access the current database so that
> is all it returns from getCatalogs.  We made this decision intentionally
> to handle the exact situation that your next getTables call reveals.  If
> we returned other databases in getCatalogs, people would try to use them
> in other database metadata calls which would not work.

To elaborate: If you want to use queries "across databases" or otherwise
use more than one database in a single connection, you probably need to
use schema not databases to separate things.

PostgreSQL's "schema" are like MySQL's "databases"; they're ways of
dividing up naming of objects that live within the same storage space.

--
Craig Ringer

Tech-related writing: http://soapyfrogs.blogspot.com/