LINUX.ORG.RU

одномерные и двумерные массивы

 


0

1

Тут мы видим как мы можем к сохраненному одномерному массиву добавлять значение:

create table a1 (val bigint[]);
insert into a1 (val) values (array[1]);
select array_append(val, 2::bigint) from a1;
 array_append 
--------------
 {1,2}
(1 строка)

А вот тут с двумерным массивом это не получается:

create table a2 (val bigint[][]);
insert into a2 (val) values (array[array[1]]);
select val from a2;
  val  
-------
 {{1}}
(1 строка)


select array_append(val[1], 2::bigint) from a2;
ОШИБКА:  функция array_append(bigint, bigint) не существует
СТРОКА 1: select array_append(val[1], 2::bigint) from a2;
                 ^
ПОДСКАЗКА:  Функция с данными именем и типами аргументов не найдена. Возможно, вам следует добавить явные приведения типов.

как исправить последний запрос чтобы он вернул 1,2 ?

Для чего все это? С одномерным массивом я могу сделать

UPDATE a1 SET val = array_append(val, 3);
и положить в конец огромного массив а значение, при этом не гоняя весь массив по сети. Те это некий std::list<int> в который я делаю push_back(3);

Я же хочу иметь не std::list<int>, а std::list<std::list<int>> - список списков интов чтобы в каждом списке интов делать push_back() независимо от других. Может Postgres так не умеет? Тогда это ОЧЕНЬ печально(((

quester ★★ ()
Ответ на: комментарий от anonymous

Тогда это очень печально. Это крайне важно если использовать postgres как key/value базу на что он так же претендует

quester ★★ ()
Ответ на: комментарий от anonymous

Так по идее элемент списка списков это и есть список - one-dimensional array

quester ★★ ()
Ответ на: комментарий от quester

это map... как add туда делать понятно... осталось понять как выбирать диапазоны ключей...

quester ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.