Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

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

by TJPride (Pilgrim)
on Dec 14, 2011 at 09:08 UTC ( [id://943500]=note: print w/replies, xml ) Need Help??


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

$dbh->{'Name'}

Incidently, if you have multiple databases, it's often useful to be able to tell which one you're currently connected to. You -could- theoretically store the current database name in a variable, but sometimes it's just easier to access it via the handle. I use the above format myself occasionally.

Replies are listed 'Best First'.
Re^2: DBI:how to get name of the db ?
by erix (Prior) on Dec 14, 2011 at 10:41 UTC

    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.

      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.))

    A reply falls below the community's threshold of quality. You may see it by logging in.
Re^2: DBI:how to get name of the db ?
by ansh batra (Friar) on Dec 14, 2011 at 09:15 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://943500]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-25 15:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found