Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Mime::Parser и переход на Posgresql 9.01


Автор: antananarivu 10.12.2010, 11:40
Понимаю, что вряд ли кто то сможет помочь.

Есть процедура (procedure shedule()) использующая Mime::Parser.
Перешли на Postgresql 9.0.1. 
Проблема: если делать select shedule() из PGadmin3 (1.12) - все корректно работает. Если же запускать из командной строки (ubuntu 10.04 psql 9.0.1), то parser не отрабатывает.

Код

my $entity = $parser->parse_data($p_stdin);
my $header = $entity->head;
$subject = $header->get('Subject');
$to = $header->get('To');
$from = $header->get('From');
$date = $header->get('Date');


Все subject, to, from, date - все остается пустым. 

Ума не приложу в чем может быть проблема... 
Заранее спасибо!

P.S. В коде ничего не менялось.

Автор: antananarivu 10.12.2010, 13:23
Вывел в логи ошибку... 

WARNING:  Can't call method "head" on an undefined value at line 128.

То есть по какой то причине - 


Код

$entity = $parser->parse_data($p_stdin);
$header = $entity->head;


не отрабатывает... хотя в $p_stdin честно лежит текст письма eml.
ничего не понимаю...

Автор: antananarivu 10.12.2010, 13:45
Разобрался в чем причина.
Данные из таблицы messageblks - в котором и хранится текст письма раньше не был закодирован. и я смело скармливал его парсеру. теперь же данные выглядят приблизительно так:
Код

\x52656365697665643a2066726f6d206777312e6e6578742d6c696e652e727520286777312e6e6578742d6c696e652e7275205b38392e3137392e3133362e35315d290a096279206d61696c2e6e6578746c696e652e72752028506f73746669782920776974682045534d5450206964204345413645333132303544460a09666f72203c6e616c406e61453467494445774d7a45304e54413143774141546941674d54417a4d6a41784d444555414..."


я даже не могу понять в какой кодировке они там.

Автор: antananarivu 10.12.2010, 14:46
Это тип данных bytea - может быть он поменялся в новой версии Постгреса? Может быть его представление зависит от каких то настроек?..

Автор: antananarivu 10.12.2010, 15:27
Вопрос снят


http://victor-k-development.blogspot.com/2010/10/bytea-postgresql-90.html

среда, 20 октября 2010 г.
Изменился формат вывода bytea в PostgreSQL 9.0 
После перехода на PostgreSQL 9, в одном из приложений, в разработке которого я учавствую, начала возникать ошибка при получении и десериализации данных, которые хранятся в базе данных в поле типа byte. В приложении используется библиотека Npgsql.

Причиной возникновения ошибки стало изменение формата вывода данных типа bytea. До версии PostgreSQL 9 форматом вывода по умолчанию был escape. Начиная с версии PostgreSQL 9 форматом вывода по умолчанию стал hex. Библиотека Npgsql этих изменений еще не учитывает.

Я нашел два способа решения этой проблемы. Первый, это изменение параметра bytea_output в конфигурационном файле postgresql.conf. Нужно убрать комментарий и установить значение escape. Второй способ, это в клиентском коде преобразовать массив из hex-формата в обычный массив байт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)