анализ типа данных массива PostgreSQL как массива в perl

#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