[Moscow.pm] хост из $dbh
Alexander M. Pravkin
fduch на antar.bryansk.ru
Пн Сен 10 22:34:38 PDT 2012
On Tue, 2012-09-11 at 01:24 +0400, Михаил Монашёв wrote:
> Есть соединение с БД, созданное так:
> $dbh = DBI->connect(bla-bla-bla);
>
> Как имея только $dbh, желательно средствами только DBI (т.е.
> по-правильному), получить имя хоста, к которому сделано соединение?
> Причём так, чтобы работало одинаково на разных серверах и при разном
> написании параметров соединени (порт слитно с именем хоста или
> отдельным параметром и т.п.).
>
> parse_dsn() выдаёт то, что снова надо парсить. И когда начинаешь это
> парсить, выясняются выше описанные ньансы, намекающие на то, что
> где-то должен быть правильный способ вынуть хост. Он есть?
Вряд ли. Параметры коннекта ('dbname=foo;host=localhost') самому DBI
фиолетовы, он их передаёт непосредственно драйверу. Дальше всё зависит
от драйвера.
DBD::Pg, например, заменяет все ';' на пробелы, добавляет туда же
логин-пароль и передаёт строку целиком в PQconnectdb без разбора.
При уже установленном соединении хост можно вытащить уже средствами
libpq, это умеет dbd_db_FETCH_attrib("pg_host"):
% perl -MDBI -E 'say DBI->connect("DBI:Pg:dbname=fduch;host=$_")->{pg_host} foreach ("", "localhost", "127.0.0.1")'
localhost
127.0.0.1
DBD::mysql вроде умеет dbd_db_FETCH_attrib("hostinfo").
--
Alexander M. Pravkin
Подробная информация о списке рассылки Moscow-pm