Можно ли вернуть массив идентификаторов из оператора вставки Postgresql в возвращаемом предложении?

Я пытаюсь написать оператор удаления, и предложение возврата возвращает идентификаторы как массив объектов как таковой:

[
{simcard_id: 1},
{simcard_id: 2},
{simcard_id: 3},
]

но я хотел бы, чтобы он возвращал массив чисел как таковой:

[1, 2, 3]

Есть ли способ заставить оператор возвращать массив только чисел? Я попробовал несколько агрегатных функций, но продолжаю получать сообщения об ошибках, говорящих о том, что я не могу выполнять функции array_agg в операторе return. Я также пытался сделать это:

RETURNING ARRAY[simcard_id]

Но потом стало просто странно.

Я не лучший в sql, поэтому любая помощь будет принята с благодарностью.

Я знаю, что могу просто отображать значения и возвращать массив чисел, но я хотел бы воспользоваться этой возможностью, чтобы узнать, могу ли я сделать это с помощью sql.

Вот sql-запрос. Он использует библиотеку postgres для nodejs.

      const simcardsIds = await sql`
      DELETE FROM simcards
      WHERE simcard_id = ANY(${sql.array(simcards)})
      RETURNING simcard_id
      `

person Uzair Ashraf    schedule 25.05.2020    source источник


Ответы (1)


Вы можете приблизиться к этому, используя что-то вроде этого:

with x as (
   delete from simcards
   where simcard_id in (1,2)
   returning simcard_id
)
select array_agg(simcard_id) as y from x;

Это даст вам такой результат:

 y
-----------
 {1,2}

Вы можете пойти немного дальше:

with x as (
    delete from simcards
    where simcard_id in (1,2)
    returning simcard_id
),
main as (select array_agg(simcard_id) as y from x)
select replace(  replace(y::text, '{', '['),   '}', ']') as out from main;

Это даст вам:

  out  
-------
 [1,2]
person zedfoxus    schedule 25.05.2020
comment
Я пошел с вашим первым примером, большое спасибо! Я прочитаю с калюзами. - person Uzair Ashraf; 25.05.2020