Самый простой вариант - прописать $dbh->{__server} при коннекте. Можно
сделать это в классе-наследнике от DBI, как бы наследование для того и
придумано.А вообще где-то в недрах $dbh так или иначе есть сокет, по нему узнать можно IP, по которому в случае необходимости можно получить имя хоста. 11 сентября 2012 г., 9:34 пользователь Alexander M. Pravkin <[email protected]> написал: > 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 mailing list > [email protected] | http://moscow.pm.org -- С уважением, Александр Личный блог: http://eax.me/ Мой форум: http://it-talk.org/ Мой Twitter: http://twitter.com/afiskon -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
