172 похожих чатов

А есть какой-нибудь способ преобразовать тип данных record к array

(точнее, к bigint[])?

У меня пока вот так сделано, через преобразование в текст, а потом в массив:

SELECT string_to_array(translate(t::text, '()', ''), ',')::bigint[]
FROM (VALUES ($1)) AS t

(при этом ещё проблема в том, что $1 приобретает тип text, но это ладно, это вторая проблема)

6 ответов

24 просмотра
Dmitry-Krylov Автор вопроса

Ещё вариант -- прогнать через 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)

NikolayS
дальше array_agg

или — иногда удобнее — select array(select ...)

NikolayS
или — иногда удобнее — select array(select ...)

вот извращение целиком: select array_agg((t).oid::int8 order by oid) from pg_type as t;

Dmitry-Krylov Автор вопроса
NikolayS
record – сколько в ней колонок? есть синтаксис (t)...

У меня это подставляемый параметр, там большой запрос, в котором надо $1 привести к массиву: SELECT ... FROM ... ( SELECT string_to_array(translate(t::text, '()', ''), ',')::bigint[] FROM (VALUES (${suborgIds_*})) AS t ) AS suborgIds_ ...

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта