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

A reply falls below the community's threshold of quality. You may see it by logging in.