Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Re^2: DBI:how to get name of the db ?

by erix (Parson)
on Dec 14, 2011 at 10:41 UTC ( #943522=note: print w/replies, xml ) Need Help??

in reply to Re: DBI:how to get name of the db ?
in thread DBI:how to get name of the db ?

It turns out that $dbh->{'Name'} is not a reliable source for the database name; DBI docs say:

Holds the "name" of the database. Usually (and recommended to be) the same as the "dbi:DriverName:..." string used to connect to the database, but with the leading "dbi:DriverName:" removed.

DBD::Pg complies wth that description: it simply returns the connectionstring minus the prefix.

So it would seem that if $dbh->{'Name'} returns the database name it's by accident.

Replies are listed 'Best First'.
Re^3: DBI:how to get name of the db ?
by Tux (Abbot) on Dec 14, 2011 at 11:37 UTC

    In other words, it holds the part after the driver indication in the DSN part. When e.g. connecting to CSV like

    my $dbh = DBI->connect ("dbi:CSV:f_ext=.csv/r;f_encoding=utf-8", undef +, undef, { RaiseError => 1 });

    The return values for $dbh->{Name} will be f_ext=.csv/r;f_encoding=utf-8, which might not be very useful information.

    The fact the DBD::Pg in your case returns the correct database name, might be because you initiated the connection using something like

    my $dbh = DBI->connect ("dbi:Pg:dbname=test", ...);

    but when you connect using just "dbi:Pg:" in combination with the environment variable $PGDATABASE, you might not get anything useful at all

    $ env PGDATABASE=merijn perl -MDBI -wE'say DBI->connect("dbi:Pg:")->{N +ame}||"not known"' not known $

    Enjoy, Have FUN! H.Merijn
      The fact the DBD::Pg in your case returns the correct database name,

      We are in complete agreement. You just didn't read my post well ;-) I log 'passwordless' into postgres with PGPASSFILE and friends (PGHOST, PGPORT, PGDATABASE), so my $dbh->{'Name'} returns empty.

      (and btw, your example ("dbi:Pg:dbname=test", ...) will return not 'test', but 'dbname=test', although I suppose you understand that. (Apparently DBD::Pg was actually changed a while ago to give this DBI-compliant behavior, instead of the database name.))

Re^3: DBI:how to get name of the db ?
by TJPride (Pilgrim) on Dec 14, 2011 at 17:07 UTC
    All I know is it works for me. Maybe I got lucky and this isn't the "proper" way to do it, but if it ain't broke, don't fix it...

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://943522]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2018-05-24 03:04 GMT
Find Nodes?
    Voting Booth?