Postgres: изменить каждый элемент массива - PullRequest
0 голосов
/ 05 марта 2019

У меня есть столбец postgres double []: {100, 101, 102}.

Я хочу разделить каждый элемент на 10, поэтому результат должен быть {10.0, 10.1, 10.2}.

Я нашел решения только для операторов for, но как реализовать это простым запросом? (Мне нужно обновить через liquibase)

Альтернатива - написать Java-миграцию, но я бы предпочел простой запрос ...

Заранее спасибо!

ОБНОВЛЕНИЕ:

Вторая возникшая проблема:

При выполнении этого через скрипт Java-миграции Liquibase вы получаете liquibase.database.jvm.JdbcConnection (через liquibase.change.custom.CustomTaskChange), который, конечно, не поддерживает postgres-arrays = /.

Как обращаться с массивами таким образом? (Я использую жидкокристаллический сердечник 3.5.5)

1 Ответ

3 голосов
/ 05 марта 2019

Вам нужно отложить, разделить, а затем собрать обратно.

update the_table
  set the_array = array(select t.val / 10 
                        from unnest(the_table.the_array) as t(val));

Если вам нужно сохранить исходный порядок в массиве, используйте with ordinality

update the_table
  set the_array = array(select t.val / 10 
                        from unnest(the_table.the_array) with ordinality as t(val,idx) 
                        order by t.idx);

Чтобы запустить это в Liquibase, вам нужно использовать <sql> change

Онлайн пример: https://rextester.com/IJGA96691

...