The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Perl + Psql"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 08-Дек-04, 18:12  (MSK)
Здравствуйте. Есть база данных mydb. Там есть таблица mytable.
В которой есть столбцы name и id. По id мне нужно достать name.
Ручками это выглядит так:
mydb=# SELECT name FROM mytable WHERE id = '1.1';
А сейчас потребовалось доставать это имя скриптом на перле.
В умной книжке нашёл только описание как это сделать используя
модуль pgsql_perl5, но использовать этот модуль у меня нет возможности.
Подскажите, пожалуйста, как мне это сделать, или дайте ссылку, где можно
найти решение. Спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Perl + Psql"
Сообщение от XMan Искать по авторуВ закладки(ok) on 09-Дек-04, 02:51  (MSK)
Все смотрят в сторону модулей DBI и DBD::MySQL.
Будешь пользовать DBI - забудешь о переписывании скрипта под разные серверы. Он для того и сделан.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Perl + Psql"
Сообщение от wersa emailИскать по авторуВ закладки(??) on 09-Дек-04, 12:25  (MSK)
попробуй примерно так

        $SQL=<<EOF;

                SELECT

                        name

                FROM

                        mydb

                WHERE

                       id = '1.1'

EOF

        $sth = $dbh->prepare($SQL);

        $sth->execute() or die $DBI::errstr;

        while(my @row = $sth->fetchrow_array) {

                printf "%s
\n", $row[0], $row[1];

        }

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 10-Дек-04, 14:08  (MSK)
>попробуй примерно так
>
>        $SQL=<<EOF;
>
>            
>    SELECT
>
>            
>          
> name
>
>            
>    FROM
>
>            
>          
> mydb
>
>            
>    WHERE
>
>            
>          
>id = '1.1'
>
>EOF
>
>        $sth = $dbh->prepare($SQL);
>
>        $sth->execute() or die $DBI::errstr;
>
>        while(my @row = $sth->fetchrow_array) {
>
>            
>    printf "%s
>\n", $row[0], $row[1];
>
>        }

Да мне даже подконнектиться к базе не удаётся...
вот что я добавляю:
сначала
use DBI;
use DBD::Pg;
use strict;

my $dsn = mydb;
my $user = alex;
my $password = alex;

...затем уже в главной части
$dbh = DBI->connect( $dsn, $user, $password );
и всё, уже не пашет.
Так что SELECT мне ещё рано делать :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Perl + Psql"
Сообщение от wersa emailИскать по авторуВ закладки(??) on 10-Дек-04, 14:41  (MSK)
#!/usr/bin/perl -w

use strict;

use DBI;

$| = 1;

$SIG{INT} = \&onsig;

$SIG{KILL} = \&onsig;

$SIG{TERM} = \&onsig;

my $dbh;

&db_open;

сюда селект который я писал раньше

&db_close;

sub db_open() {

        my $user = 'юзер';

        my $password = 'пароль';

        my $database = 'ДБ';

        my $hostname = 'бля.ru';

        my $port = 3306;

        my $dsn =

"DBI:mysql:database=$database;host=$hostname;port=$port";

        $dbh = DBI->connect($dsn, $user, $password) or die

$DBI::errstr;

}

sub db_close() {

        ($dbh->disconnect or die $DBI::errstr) if $dbh;

}

sub onsig() {

        my $sig = shift;

        print "\nSIG $sig cathed - exiting!\n";

        &sa_close();

        exit 1;

}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 10-Дек-04, 14:48  (MSK)
Да при чём тут mysql.
Ведь ясно написано, что у меня Postgresql
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Perl + Psql"
Сообщение от Simps Искать по авторуВ закладки(??) on 10-Дек-04, 15:52  (MSK)
>Да при чём тут mysql.
>Ведь ясно написано, что у меня Postgresql
Очень похоже на капризный тон и отключение мозга ...

https://www.opennet.ru/base/dev/postgres_notes.txt.html

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Perl + Psql"
Сообщение от wersa emailИскать по авторуВ закладки(??) on 10-Дек-04, 16:51  (MSK)
>Да при чём тут mysql.
>Ведь ясно написано, что у меня Postgresql

пример тебе дал там сам смотри.

проверь доходит ли запрос до сервера на котором БД.
не смотри скептически на следующую фразу, но все таки проверь пароль.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 10-Дек-04, 17:10  (MSK)
>>Да при чём тут mysql.
>>Ведь ясно написано, что у меня Postgresql
>
>пример тебе дал там сам смотри.
>
>проверь доходит ли запрос до сервера на котором БД.
>не смотри скептически на следующую фразу, но все таки проверь пароль.


В натуре, пароль не проходит :(
Всё 1000 раз проверил, всё правильно пишу, но он пишет
FATAL:  Password authentication failed for user "alex"

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 10-Дек-04, 17:37  (MSK)
Кто-нибудь может подсказать, в чём могут быть грабли?
Захожу
#psql -U mydb alex
Password: alex
Всё ок.
А пишу в скрипте
Сначала в главном скрипте
$ENV{DBNAME}.="mydb";
$ENV{RDBUSER}.="alex";
$ENV{RPASSWD}.="alex";
Затем в том, где читается база
my $dbname = $ENV{"DBNAME"};
my $dbuser = $ENV{"RDBUSER"};
my $dbpass = $ENV{"RPASSWD"};
$db =DBI->connect("dbi:Pg:dbname=$dbname",$dbuser,$dbpass, $options)or die "Error in connecting in DataBase";
В ответ получаю
DBI->connect(dbname=mydb) failed: FATAL:  Password authentication failed for user "alex"
  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Perl + Psql"
Сообщение от XMan Искать по авторуВ закладки(ok) on 10-Дек-04, 18:12  (MSK)
Загляни в потгресовский pg_hba.conf на предмет разрешения заходов по сети с твоей машины. Возможно, там построено не пускать.

PS. В RH-сиситемах он валяется в /var/lib/pgsql/data

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(??) on 12-Дек-04, 15:12  (MSK)
>Загляни в потгресовский pg_hba.conf на предмет разрешения заходов по сети с твоей
>машины. Возможно, там построено не пускать.
>
>PS. В RH-сиситемах он валяется в /var/lib/pgsql/data


Этого не может быть.
База находится на той же машине, что и я со своими скриптами.

PS: у меня debian.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Perl + Psql"
Сообщение от XMan Искать по авторуВ закладки(ok) on 12-Дек-04, 23:24  (MSK)
Это может быть. По умолчанию разрешено заходить только по unix-сокету, которым и пользуется консоль psql. Причем, аутентификация ident, то есть логин пользователя базы данных должно совпадать с системным логином.

Так же по умолчанию построен запрет на TCP-подключения, чем пользуются все, в том числе и DBD::Pg. Судя по сообщению, слушать TCP у тебя разрешены, но не факт, что разрешено заходить с localhost с указанным именем.


Еще возможен вариант, когда у тебя новый постгрес и старый драйвер в перле. Но с такой несовместимостью я не сталкивался уже очень давно.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "Perl + Psql"
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 13-Дек-04, 14:37  (MSK)
>Это может быть. По умолчанию разрешено заходить только по unix-сокету, которым и
>пользуется консоль psql. Причем, аутентификация ident, то есть логин пользователя базы
>данных должно совпадать с системным логином.
>
>Так же по умолчанию построен запрет на TCP-подключения, чем пользуются все, в
>том числе и DBD::Pg. Судя по сообщению, слушать TCP у тебя
>разрешены, но не факт, что разрешено заходить с localhost с указанным
>именем.
>
>
>Еще возможен вариант, когда у тебя новый постгрес и старый драйвер в
>перле. Но с такой несовместимостью я не сталкивался уже очень давно.
>

Проверил, насколько я понимаю тут всё разрешено.

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
local             all                all                                                                      trust
host             all                all              127.0.0.1         255.255.255.255     trust

Ладно, буду тогда баги искать, может я ошибся где-нибудь или опечатался...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "Perl + Psql"
Сообщение от mthawk emailИскать по авторуВ закладки(ok) on 19-Дек-04, 17:22  (MSK)
>Здравствуйте. Есть база данных mydb. Там есть таблица mytable.
>В которой есть столбцы name и id. По id мне нужно достать
>name.
>Ручками это выглядит так:
>mydb=# SELECT name FROM mytable WHERE id = '1.1';
>А сейчас потребовалось доставать это имя скриптом на перле.
>В умной книжке нашёл только описание как это сделать используя
>модуль pgsql_perl5, но использовать этот модуль у меня нет возможности.
>Подскажите, пожалуйста, как мне это сделать, или дайте ссылку, где можно
>найти решение. Спасибо.


#!/usr/bin/perl
use DBI;
$dbh = DBI->connect("dbi:Pg:dbname=$DBNAME; host=$HOST", $USER, $PASSWD) or die "Cannot connect $DBNAME on $HOST:$!";
$get=$dbh->prepare("SELECT name FROM mytable WHERE id = '1.1'");
$get->execute;
$name=$get->fetchrow; #если возвращается одна строка.
print "$name\n";
---------------------------
while(($name,$еще-что-то,$и_еще_что_то)=$get->fetchrow)
      {
       print "$name,$еще-что-то,$и_еще_что_то\n";
      }
#если возвращается несколько строк.


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру