Добавление значения к целочисленному массиву Postgres

Я ищу помощь в добавлении стоимости 10 для int[] в PostgreSQL 9.5.

Глядя на документацию, я смогу использовать этот формат для его обновления, но он не работает:

int[] + int   push element onto array (add it to end of array)

Я попытался запустить это:

update table1 set integer_array = integer_array + 10::Integer. 

Это не сработало, и я получил эту ошибку:

ERROR: operator does not exist: integer[] + integer
  Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
  Position: 67

Я чувствую, что это тот же формат, который представлен в документации о том, как выполнить эту операцию.

1 ответ

Использование array_append функция для добавления элемента в конец массива:

UPDATE table1
SET integer_array = array_append(integer_array, 5);

5 - это значение выбора, в вашем случае это целочисленный тип данных. Вам, вероятно, нужно немного WHERE пункт, а не обновлять всю таблицу.

Попробуйте ниже, чтобы увидеть, как это работает:

SELECT ARRAY[1,2], array_append(ARRAY[1,2],3);

Результат:

 array | array_append
-------+--------------
 {1,2} | {1,2,3}

Мне нравится этот способ лучше:

UPDATE table1 SET integer_array = integer_array || '{10}';

Вы также можете добавить несколько значений одним запросом:

UPDATE table1 SET integer_array = integer_array || '{10, 11, 12}';

Один:

UPDATE table1
SET integer_array = array_append(integer_array, 3);

несколько:

UPDATE table1
SET integer_array = array_cat(integer_array, ARRAY[4,5]);

https://www.postgresql.org/docs/9.1/functions-array.html

-- Declaring the array

arrayName int8[];

-- Adding value 2206 to int array

arrayName := arrayName || 2206;

-- looping throught the array

FOREACH i IN ARRAY arrayName 
LOOP 

 RAISE NOTICE 'array value %', i;

END LOOP;

ура

Другие вопросы по тегам