#arrays #perl #postgresql
#массивы #perl #postgresql
Вопрос:
У меня возникла проблема с переносимостью при анализе типа данных массива PostgreSQL в perl.
На одной машине под управлением PostgreSQL 8.3.7 в SUSE Linux 4.3.2 и perl версии 5.10.0 тип данных массива postgres анализируется как массив perl, а на другой машине под управлением PostgreSQL 8.4.4 в Red Hat 4.1.2-46 и perl версии 5.8.8 тот же тип данных анализируется как строка, представляющая массив posgres, например ‘{{4,315}}’. В обоих случаях используется один и тот же очень простой код.
use DBI;
$dbh = DBI->connect(DBI:pg [...]);
$res = $dbh -> selectall_arrayref(select [...]);
А теперь вопросы:
Как я могу принудительно изменить одно поведение, предпочтительно первое (анализируется как массив perl)? От чего зависит это поведение? (версия perl? драйвер? настройки postgres?, версия postgres?)
Ответ №1:
Ну, в официальных документах говорится, что вы должны установить $dbh->{pg_expand_array}
значение true.
Хотя я сам это не проверял.
Комментарии:
1. Отлично, спасибо! К сожалению, pg_expand_array не существует на компьютере, который анализирует массивы PostgreSQL в виде строк. Может быть, DBI неправильно скомпилирован?
2. И под «не существует» я имею в виду, что я не могу его распечатать или установить. 🙂
3. Это должно быть
DBD::Pg
, а не сам DBI.4. Похоже, что он поддерживает массивы с версии 2.0.0, выпущенной 10 февраля 2008 года 2.0.0 (из журнала изменений)
5. Спасибо! Да, это была проблема с версией — 1.49