Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Массивы в таблице / 11 сообщений из 11, страница 1 из 1
23.01.2007, 12:27
    #34274744
dio_bless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
Добрый день. Не могу разобраться с инсертом массива в таблицу и его выборкой оттуда, подскажите, плиз как это сделать ?

CREATE TABLE test (
name text,
user_id integer[],
);

код (perl):

#!/usr/bin/perl -w
use SQLayer;
my $D = SQLayer -> new(database =>$connect{'database'},user=>$connect{'user'}, password=>$connect{'password'});

my @arr=('4','5','6','7','8');
$D->proc("INSERT INTO test VALUES ('main','{@arr}')"); ---- можно ли вставить в это поле массив (у меня не получилось =( )

и в случае использования SQLayer каким методом можно из это го поля (user_id) выбрать массив
(my $new_arr=$D-> ??)
заранее спасибо.
...
Рейтинг: 0 / 0
23.01.2007, 13:51
    #34275161
dio_bless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
помогите плиз...
хотя бы что читать =)
...
Рейтинг: 0 / 0
23.01.2007, 14:56
    #34275504
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
dio_blessДобрый день. Не могу разобраться с инсертом массива в таблицу и его выборкой оттуда, подскажите, плиз как это сделать ?

CREATE TABLE test (
name text,
user_id integer[],
);

код (perl):

#!/usr/bin/perl -w
use SQLayer;
my $D = SQLayer -> new(database =>$connect{'database'},user=>$connect{'user'}, password=>$connect{'password'});

my @arr=('4','5','6','7','8');
$D->proc("INSERT INTO test VALUES ('main','{@arr}')"); ---- можно ли вставить в это поле массив (у меня не получилось =( )

и в случае использования SQLayer каким методом можно из это го поля (user_id) выбрать массив
(my $new_arr=$D-> ??)
заранее спасибо.
Не скажу я тебе ничего по перлу, но раз никто не отвечает....
Похоже вся фишка в том, что перл не может запихать массив в этот инсерт. Да я вообще плохо могу себе такое представить, как должен передаться массив в обычную текстовую строку.
Поэтому я тебе рекомендую попробовать выполнить:
$D->proc("SELECT '{@arr}'");
Что получается?
Вообще, должно работать вот так:
$D->proc("INSERT INTO test VALUES ('main',ARRAY[1, 2, 3])");
Или вот так.
$D->proc("INSERT INTO test VALUES ('main',String_To_Array('1,2,3', ','))");
...
Рейтинг: 0 / 0
23.01.2007, 15:23
    #34275654
dio_bless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
INSERT INTO test_arr VALUES ('main',ARRAY[1, 2, 3]) - да так, конечно, работает
но для такого вида инсерта мне надо мой перловый массив раскладывать в строку, а привыборке из базы - опять сплитить полученную строку в массив... тогда я не понимаю смысла в постгресовском типе данных array - зачем он нужен, если работать как с массивом с ним нельзя(на выходе - всё равно строка...)
...
Рейтинг: 0 / 0
23.01.2007, 15:31
    #34275700
dio_bless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
или я чего то не понимаю...
...
Рейтинг: 0 / 0
23.01.2007, 18:52
    #34276478
dio_bless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
Люди! если я чего не так пишу - направтье, плиз на путь истинный, но очень надо разобраться.Помогите =)
...
Рейтинг: 0 / 0
23.01.2007, 19:29
    #34276586
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
dio_blessЛюди! если я чего не так пишу - направтье, плиз на путь истинный, но очень надо разобраться.Помогите =)
На сколько я знаю - то массивы постгреса это его внутрення штука и наружу не сильно выходит.
...
Рейтинг: 0 / 0
24.01.2007, 07:16
    #34277046
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
Andrey Daeron dio_blessЛюди! если я чего не так пишу - направтье, плиз на путь истинный, но очень надо разобраться.Помогите =)
На сколько я знаю - то массивы постгреса это его внутрення штука и наружу не сильно выходит.
Ну, почему не сильно. На сях можно выдернуть, причем в виде массива в том числе. А вот Perl он не ожидает массива с SQL'ного сервака (потому что их в стандарте SQL нет). Собственно и запихать массив в строку запроса для него непросто. Не понимает, зачем.
Вообще, у себя я массивы использую в основном только на бэкофисе, потому что фокс тоже воспринимает все как BLOB с текстовым содержимым. В крайнем случае выбираю
'(' || Array_To_String(Any_Array, ', ') || ')' а потом уже этот результат использую в IN для сквозного запроса (на фронтэнде или бэкэнде без бани). Не больше.
...
Рейтинг: 0 / 0
24.01.2007, 10:25
    #34277480
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
SQLayer вроде бы надстройка над DBI, поэтому там не должно быть специфичных для постреса фич.

С постресовым массивом нельзя (пока?) работать как с массивом из перла.

DBD-Pg-1.49/t/05arrays.tSKIP: {
# XXX Until all the array stuff is working, skip all tests.
# Should really be a TODO, but these tests will die.
skip 'Array support not implemented', 15;

# Insert into array
my $values = [["a,b", 'c","d', "e'", '\\"'], ['f', 'g', 'h']];

ok($dbh->do(q{INSERT INTO dbd_pg_test (id, name, testarray) VALUES (?, ?, ?)},
{}, 1, 'array1', $values),
'insert statement with references');

Посмотрите также эту тему .
...
Рейтинг: 0 / 0
07.02.2007, 02:21
    #34310925
KisaNetik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
не скажу что силёнв перле, скорее наобород, знаю что он есть, но на пхп есть такая ф-я, которая дублируется и в асп, в перле что-то тоже должно быть - serialize();
вот можно просто запихнть массив в строку а когда достаёшь из базы то unserialize();
поищи подобное н перле.
К стати объекты и прочее она тоже запихает в строку
...
Рейтинг: 0 / 0
07.02.2007, 09:38
    #34311240
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы в таблице
KisaNetikне скажу что силёнв перле, скорее наобород, знаю что он есть, но на пхп есть такая ф-я, которая дублируется и в асп, в перле что-то тоже должно быть - serialize();
вот можно просто запихнть массив в строку а когда достаёшь из базы то unserialize();
поищи подобное н перле.
К стати объекты и прочее она тоже запихает в строкуДа, в перле для этого есть модуль Storable, как я писал в теме, на которую дал ссылку.

Но автор, насколько я понял, хотел native implicite преобразование между постгресовым массивом и перловым массивом. А с использованием Storable мы получим преобразование: перловый массив <-Storable-> перловая строка <-> постгресовый varchar.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Массивы в таблице / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]