Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: perl+postgres, ошибка  (Прочитано 18951 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Gekt0r
Гость
« : 03-11-2009 08:38 » 

Всем привет, возникла проблемка...
Есть сервер Апач, на котором стоит mod_perl, есть база postgres.
На сайте есть скрипт, который время от времени закидывает в базу данные. Так вот, если база пуста, то все проходит нормально.
Если база не пуста, т.е. данные перезаписываются, то появляется ошибка DBD::Pg::db "array must be one-dimensional"

С чем это может быть связано?
« Последнее редактирование: 03-11-2009 08:54 от Sel » Записан
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #1 : 03-11-2009 08:53 » 

тебе перевести ошибку?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 03-11-2009 08:54 » 

покажи update
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-11-2009 11:43 » 

Еще покажи строчки perl-кода, где готовится и выполняется проблемный SQL-оператор.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Gekt0r
Гость
« Ответ #4 : 06-11-2009 08:20 » 

в общем нашел я проблемную строчку:


$keeper->{SQL}->do("update $keeper->{documents_table} set mtime = now(), dtime = ?, sections = ?, status = ?, name = ? where id = ?", {}, $self->{dtime}, '{'.join(',', $self->sections() ).'}', $self->{status}, $self->{name}, $self->{id}) || do  { $keeper->error(); $keeper->{SQL}->rollback()    if ( ! $keeper->{handcommit}); return undef };


($keeper - глобальный объект, которая используется для связи с БД)
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 06-11-2009 22:44 » 

1. Тексты ошибок есть?

2. Проверь:
$self->{dtime}
$self->sections()
$self->{status}
$self->{name}
$self->{id}
на наличие и соответствие типов.

3.
Код:
'{'.join(',', $self->sections() ).'}'

Что ты ожидаешь вставить в оператор UPDATE? Вставится строка. Если не сбойнет на "$self->sections() не массив".
« Последнее редактирование: 06-11-2009 22:49 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Gekt0r
Гость
« Ответ #6 : 10-11-2009 07:51 » 


Разобрался.
Глюк был в функции $self->sections(), соответственно, строчке

'{'.join(',', $self->sections() ).'}'

функция иногда возвращала данные в формате массива, с фигурными скобками, а иногда - просто как скаляр. Соответственно, когда возвращался массив, ему добавлялись еще одни фигурные скобки, откуда и возникала ошибка "array must be one-dimensional"
Исправил (:
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 10-11-2009 08:27 » new

функция иногда возвращала данные в формате массива, с фигурными скобками, а иногда - просто как скаляр. Соответственно, когда возвращался массив, ему добавлялись еще одни фигурные скобки, откуда и возникала ошибка "array must be one-dimensional"

Знаешь, впечатление, что элементарных вещей о языке ты не знаешь. Какие еще "данные в формате массива, с фигурными скобками"? Это звучит бессмысленно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines