From: | Barry Lind <blind(at)xythos(dot)com> |
---|---|
To: | Kris Jurka <books(at)ejurka(dot)com> |
Cc: | Daniel Serodio <daniel(at)checkforte(dot)com(dot)br>, PostgreSQL JDBC List <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | Re: DbVisualizer shows same tables for all DBs |
Date: | 2003-02-05 01:35:17 |
Message-ID: | 3E406A55.5050309@xythos.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Here is my take on what should be done:
Kris Jurka wrote:
>
> On 28 Jan 2003, Daniel Serodio wrote:
>
>
>>I know Postgresql doesn't allow changing DBs with the same Connection,
>>but it should let tools know about this limitation via DatabaseMetadata.
>>I'm not particularly familiar with the JDBC spec, so I don't know if the
>>driver doesn't implement the spec correctly or if the spec doesn't cover
>>this sutiation.
>>
>>The fact is, when I connect to a Postgresql DB using DbVisualizer Free
>>3.1 (www.minq.se) and latest JDBC driver (build 106), I specify which DB
>>I want to connect to in the connection URL (ie
>>"jdbc:postgresql://localhost:5432/testdb"), and 3 DBs show up: testdb,
>>template0 and template1. The weird thing is that template0 and template1
>>seem to be exact copies of testdb. AFAIK, what's really happening is
>>that the driver can't "see" other DBs besides the one I connected to
>>(testdb), so it shows all DBs as if they were the same. IMHO, this
>>behaviour is quite confusing.
>
>
> The DatabaseMetaData.getCatalogs() method is called by DbVisualizer to get
> the list of available databases. When trying to display the tables in the
> database it passes the desired catalog name into the getTables method, but
> it is ignored.
>
> What could be done:
>
> 1) Make getCatalogs() only return the current catalog.
I think the current functionality is fine, however I could be convinced
otherwise.
>
> 2) Make other DatabaseMetaData methods throw an SQLException if a catalog
> other than Connection.getCatalog() is used.
I don't think an exception is necessary, as clients will not be
expecting to see an exception. For interoperability across different
clients, I think the best that can be done here is to return nothing.
So the way things work today, if you are using a client app to browse
the objects you would see:
database1
- db1table1
- db1table2
database2
- db1table1
- db1table2
which is clearly wrong. So I am suggesting that we return the following
information:
database1
- db1table1
- db1table2
database2
<empty>
or we could:
database1
- db1table1
- db1table2
<only one db shown>
>
> The getCatalogs() method's javadoc says "Gets the catalog names available
> in this database." Does that mean are available to this connection or to
> the current user on another connection or another user on another
> connection?
>
I don't know.
> Kris Jurka
>
>
Does anyone have any opinions on which way to go?
thanks,
--Barry
From | Date | Subject | |
---|---|---|---|
Next Message | Barry Lind | 2003-02-05 01:40:56 | Re: 7.3.1 UTF-8 bug(?) and 7.2.x Charset compatibility |
Previous Message | Barry Lind | 2003-02-05 01:28:02 | Re: java.lang.OutOfMemoryError |