Thread: I can't get the database's list
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-
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
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/