![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Gekt0r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 10.4.2008 Репутация: нет Всего: нет |
Всем привет, возникла проблемка...
Есть сервер Апач, на котором стоит mod_perl, есть база postgres. На сайте есть скрипт, который время от времени закидывает в базу данные. Так вот, если база пуста, то все проходит нормально. Если база не пуста, т.е. данные перезаписываются, то вылазит ошибка DBD::Pg: с чем это может быть связано? |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Может, мы код сможем увидеть?
|
|||
|
||||
| Gekt0r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 10.4.2008 Репутация: нет Всего: нет |
в общем нашел я проблемную строчку:
($keeper - глобальный объект, которая используется для связи с БД) Это сообщение отредактировал(а) Gekt0r - 6.11.2009, 11:39 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Gekt0r, какая структура модифицируемой таблицы $keeper->{documents_table},
... есть подозрение, что при заполнении столбца, который является массивом, вставляется неверное количество данных в этот столбец, но не факт Это сообщение отредактировал(а) Bulat - 6.11.2009, 12:47 -------------------- менеджер по кодеврайтингу |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Есть подозрение, что в колонку, описанной как одномерный массив, пытаются вставить двумерный. Тут надо дебужить и смотреть данные, которые пишутся в таблицу
|
|||
|
||||
| Gekt0r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 10.4.2008 Репутация: нет Всего: нет |
я вывел в логи то, что хранится в массиве. Как правило это просто число (номер секции). В какой-то момент там появляется число в фигурных скобках (например, {1511}, и выскакивает ошибка. Я так предполагаю, что тут дело в формате записи массива в postgres и perl.
откуда только эти фигурные скобки берутся, пока непонятно :( |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Фигурные скобки означают, что это массив - тип данных PostgreSQL array
http://www.postgresql.org/docs/8.4/static/arrays.html ЗЫ. Дайте все-таки дамп структуры таблицы Это сообщение отредактировал(а) krypt3r - 6.11.2009, 14:52 |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 5 Всего: 57 |
Gekt0r, возьми pgAdmin - приконнектись к БД и ждем структуры таблицы. Самый простой способ узнать, ИМХО...
Сиквел начинающийся с Create table ... -------------------- менеджер по кодеврайтингу |
|||
|
||||
| DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
Gekt0r, ontico?
-------------------- |
|||
|
||||
| Gekt0r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 10.4.2008 Репутация: нет Всего: нет |
да) ща, кое-какие идеи возникли, попробую разобраться, не получится, напишу снова) |
|||
|
||||
| DEER |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
Короче.
1) используй метод store для изменений данных в БД. Зачем изобретать велосипед?
2) Если очень НАДО использовать именно sql (я правда не понимаю ЗАЧЕМ), то скорее всего ошибка в $keeper->{documents_table} то есть логичнее сделать так
3) Ты подписан на внутрнюю рассылку? Есть вопросы - пиши туда! Разберемся гораздо быстрее Это сообщение отредактировал(а) DEER - 9.11.2009, 13:34 -------------------- |
||||
|
|||||
| Gekt0r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 10.4.2008 Репутация: нет Всего: нет |
Разобрался.
Глюк был в функции $self->sections(), соответственно, строчке
функция иногда возвращала данные в формате массива, с фигурными скобками, а иногда - просто как скаляр. Соответственно, когда возвращался массив, ему добавлялись еще одни фигурные скобки, откуда и возникала ошибка "array must be one-dimensional" Исправил (: Почему не использовать $self->store()? Просто этот код, что я привел - как раз из функции store() А что за внутренняя рассылка, как подписаться? |
|||
|
||||
| DEER |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 1 Всего: 13 |
странно, что
глючит. Как ты правильно сказал этот код из Ontico::Utils и везде так работает... про подписку ответил ЛС Добавлено через 1 минуту и 25 секунд правда ща посмотрел, там немного не так.
надо тоже проверку делать наверное -------------------- |
||||
|
|||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |