(точнее, к bigint[])?
У меня пока вот так сделано, через преобразование в текст, а потом в массив:
SELECT string_to_array(translate(t::text, '()', ''), ',')::bigint[]
FROM (VALUES ($1)) AS t
(при этом ещё проблема в том, что $1 приобретает тип text, но это ладно, это вторая проблема)
Ещё вариант -- прогнать через JSON: with t as (values (1::int,2::int,3::int)) select jsonb_array_elements(jsonb_path_query_array(row_to_json(t)::jsonb, '$.*'))::int from t; Но тоже какая-то фигня...
record – сколько в ней колонок? есть синтаксис (t).* или (t).column_name вот читаем запись целиком — схлопывается: nik=# select t from pg_type as t limit 1; t ----------------------------------------------------------------------------------------------------- (16,bool,11,10,1,t,b,B,t,t,",",0,-,0,1000,boolin,boolout,boolrecv,boolsend,-,-,-,c,p,f,0,-1,0,0,,,) (1 row) а вот тут берём конкретную колонку из неё: nik=# select (t).oid from pg_type as t limit 1; oid ----- 16 (1 row)
дальше array_agg
или — иногда удобнее — select array(select ...)
вот извращение целиком: select array_agg((t).oid::int8 order by oid) from pg_type as t;
У меня это подставляемый параметр, там большой запрос, в котором надо $1 привести к массиву: SELECT ... FROM ... ( SELECT string_to_array(translate(t::text, '()', ''), ',')::bigint[] FROM (VALUES (${suborgIds_*})) AS t ) AS suborgIds_ ...
Обсуждают сегодня