Re: Generic way of fetching a list of databases

[email protected] (Darren Duncan) Fri, 16 Nov 2018 17:38:21 -0800
Newsgroups perl.dbi.users
Message-ID <[email protected]>
What you seek is not possible, in any general sense.

The concept of "what is a database" varies too greatly between different DBMS 
products, even if you restrict yourself to SQL DBMSs.  Loosely the question is 
like asking for a "list of websites".

If what you want is to have a product or service that is DBMS-agnostic, you need 
to more precisely define the criteria for what you want a list of.

Here are some more specific definitions of a database:

- A DBMS process service endpoint or embedded library that you can connect to as 
a client.

- A file or file collection on disk that is a logical database.

- A collection of database table variables that can be addressed within a common 
database query.

- A collection of database table variables that can be collectively subject to a 
common ACID transaction, changes to the collection succeed or no-op as a whole.

- A logical namespace for database table variables.

For some DBMS engines several of the above things are one and the same, while 
with others they are not.

-- Darren Duncan

On 2018-11-15 6:09 PM, Daniel Kasak wrote:
> Hi all.
> 
> I have a project that has to support pretty much every major database around, 
> plus a number of more esoteric "big data" platforms as well. Until now, I've had 
> a bunch of methods, implementing fetching databases, schemas, tables, etc, per 
> database, with database-specific queries ( eg against information_schema ).
> 
> Some of the newer databases I'm trying to support have very little 
> documentation, and in some cases no apparent way of fetching in the schema via 
> SQL. I've had a conversation with one of the tech support people for a DB 
> product who said that there were generic ODBC functions we can call for this 
> kind of thing. Is this the case?
> 
> I've done quite a bit of search, but can't find any docs that mention fetching 
> *databases* - either in ODBC docs or in Perl/DBI docs. The closest I've found 
> that *might* have worked was DBI's tables() method:
> https://metacpan.org/pod/DBI#tables
>    ... but:
> 
> - this doesn't work in cases where there is a separation between hierarchies at 
> the database level ( eg postgres only lists schemas and tables in the current 
> database )
> - this isn't returning *anything* for me with any of the ODBC drivers I've tried
> 
> So is it possible to retrieve a list of databases in a generic way? Failing 
> that, assuming that there *is* some ODBC call ( as suggested by one DB vendor ) 
> that I can use, is there some way of calling it from Perl with DBD::ODBC?
> 
> Thanks :)
> 
> Dan