The OpenNET Project / Index page

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

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

"Не работает Perl`овый модуль DBD::Pg" 
Сообщение от Dima emailИскать по авторуВ закладки(??) on 26-Май-05, 17:24  (MSK)
Люди, помогите пожалуйста. Из перлового скрипта не проходит транзакция с PostgreSQL 8.01  (система  Slackware 10.1), mod_perl 1.29,  DBI 1.48,  DBD-Pg 1.42. При установке все пакеты встали нормально.
А в скрипте когда доходит до команды $sth->execute выдаёт ошибку :
"Issuing rollback() for database handle being DESTROY'd without explicit disconnect()".
Скрипт:
use DBI;
my $dbh;
$dbh = DBI->connect("DBI:Pg:dbname=test", "user", '',
            {AutoCommit => 0, PrintError => 0, RaiseError => 0});
unless($dbh) {
my          $m->out("Can not connect to database! <p>\n");
            $m->abort(888);
                        }

my $sth_get_states = $dbh->prepare("select pole1, pole2, pole3 from table");
$sth_get_states->execute || die $dbh->errstr;

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "Не работает Perl`овый модуль DBD::Pg" 
Сообщение от Асен Тотин emailИскать по авторуВ закладки on 27-Май-05, 01:59  (MSK)
Привет,

>А в скрипте когда доходит до команды $sth->execute выдаёт ошибку :
>"Issuing rollback() for database handle being DESTROY'd without explicit disconnect()".

Да, потому что ваш скрип заканцивает работу, не выставив команду
dbh->disconnect().

Стиль программирования есть стиль программирования... А чтоб получить свои данные, неплохо бы выполнить, скажем, fetchrow_hashref() или что-то подобное на ваш вкус...

WWell,


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Не работает Perl`овый модуль DBD::Pg" 
Сообщение от Dima emailИскать по авторуВ закладки(??) on 27-Май-05, 08:49  (MSK)
Огромное спасибо, скрипт заработал! Всё из-за невнимательности, ещё раз спасибо.
Однако делаю тоже самое в HTML с использованием HTML::Mason
скрипт не хочет производить транзакцию. Ругается на 152 строку вот так:
error: ERROR: current transaction is aborted, commands ignored until end of transaction block
context:  
...  
148:   from ManTypes');
150:   my ($mt_id, $mt_title, $mt_icon);

152:   $sth_get_mtypes->execute || die $dbh->errstr;

153:   $sth_get_mtypes->bind_columns(undef,
154:   \$mt_id, \$mt_title, \$mt_icon) || die $dbh->errstr;
155:   while($sth_get_mtypes->fetch) {
156:   $man_types{$mt_id} = $mt_title;
...  
code stack:   /home/web/newmonitor/htdocs/mason/prjmgr/manmgr:152
/home/web/newmonitor/htdocs/mason/prjmgr/autohandler:3

Самое интересное, что этот скрипт работал на другой машине со старыми версиями HTML::Mason1.11, DBI1.29, DBD::Pg1.13 и Postgres 7.03
Где примерно может быть ошибка? Заранее благодарю.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Не работает Perl`овый модуль DBD::Pg" 
Сообщение от Асен Тотин emailИскать по авторуВ закладки on 27-Май-05, 13:31  (MSK)
Привет,

Я бы посмотрел внимательнее что изменилось с 7.03 до вашей 8-ки Postgres... Если память не изменяет, 7.03 - релиз трех-четырехлетней давности (судя по DBI 1.29 тоже). Возможно, изменилось что-нибудь в выполнении транзакции со стороны самого энджина Postgres.

Возможно так же, что у вас возникает ошибка при выполнеий одного из запросов транзакции; при этом энджин "сваливает" всю транзакцию. Вот здесь есть объяснение как в 8-ке это обойти:

http://www.sql.ru/forum/actualthread.aspx?tid=180204

WWell,

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Не работает Perl`овый модуль DBD::Pg" 
Сообщение от Dima emailИскать по авторуВ закладки(??) on 27-Май-05, 15:33  (MSK)
Благодарю Вас!
Если бы не Вы меня бы начальники придушили бы.
Разобрался. Пришлось немного код менять. Перед каждым execute  выставил $dbh->commit; после чего всё заработало.  

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Не работает Perl`овый модуль DBD::Pg" 
Сообщение от Асен Тотин emailИскать по авторуВ закладки on 27-Май-05, 15:45  (MSK)
Привет,

>Разобрался. Пришлось немного код менять. Перед каждым execute  выставил $dbh->commit; после чего всё заработало.  

У вас стоит:

$dbh = DBI->connect("DBI:Pg:dbname=test", "user", '',
            {AutoCommit => 0, PrintError => 0, RaiseError => 0});

Во многих случаях удобнее прописать прямо здесь "AutoCommit => 1". Почитайте в man DBI об этом.

WWell,


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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