Можно ли узнать, что означает эта ошибка "error: SQL error: input of anonymous composite types is not implemented"
Я получаю указанную выше ошибку ("error: SQL error: input of anonymous composite types is not implemented"
), когда выполняю приведенный ниже запрос,
select *
from dev d
where not exists (select *
from (
select *
from jsonb_array_elements_text(d.json_id -> 'sourcedepartmentId')
where jsonb_typeof(d.json_id -> 'sourcedepartmentId') = 'array'
and d.json_id -> 'sourcedepartmentId' is not null
union all
select d.json_id ->> 'sourcedepartmentId'
where jsonb_typeof(d.json_id -> 'sourcedepartmentId') = 'string'
and d.json_id -> 'sourcedepartmentId' is not null
) as jdata
where jdata in ( '109ec13a-46bd-26fe-6b1f-c4f329c76fda',
'fcf6f607-54f7-4e7c-8a42-23b66091a435',
'2dd35f81-27ce-55eb-bd3e-e46be3a378c4',
'1b381823-1df1-4ced-8b66-baad6e2456ee' )
)
d.json_id -> 'sourcedepartmentId'
будет иметь значения, как показано ниже,
["ba18e414-92d3-446b-91b4-67050f891121"]
или["45b90b79-1151-4d8c-8785-4886607524bd", "70b9de47-5e10-42a5-bf30-81c0d4efe6bd", "e1f30960-06eb-41b4-9ca7-49b389defcab", "5cb85419-7fb7-45bd-ae8c-46b3d7ab9154"]
илиВыдержка из схемы таблицы для таблицы с именем dev
,
идентификатор разработчика | Имя сотрудника | JSON-идентификатор |
---|---|---|
ef7fd5df-7881-470d-bc7d-846211df0344 | Том | {"sourcedevIds":[],"sourcedepartmentId":["45b90b79-3457-4d8c-8567-4886602367bd"]} |
345р34-2345-56ыт-78уи-343тртрфг567 | Джон | {"sourcedevIds":["wedfrtg-3456-3trr-6887-rte45R3"],"sourcedepartmentId":["45b90b79-1050-4d8c-8785-4886607524bd", "70b9de23-5e12-42a5-bf30-81c0d4efe6bd", "501f300 -06eb-41b4-9ca7-49b456defcab", "5cb84516-7fb7-23bd-ae8c-46b3d7ab3467"]} |
|345r34-2345-56yt-78ui-343trtrfg567 | Брайан | {"sourcedevIds":["wedfrtg-7890-3trr-6887-rte45R3"],"sourcedepartmentId":[]}|
Любая помощь приветствуется. Спасибо.
Что такое ...
? Пожалуйста, поделитесь минимальный воспроизводимый пример, чтобы мы могли, например. вставьте в dbfiddle, чтобы получить ту же ошибку. Я предполагаю, что jdata
является «составным типом» (из select *
) и что ...
содержит некоторые нетипизированные входные параметры.
Ошибка, кажется, в многоточии.
@Bergi Берги, я обновил вопрос. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. where jdata in
будет иметь список значений UUID, как показано выше. Спасибо
@jaesonBernardsha ах, да, мне кажется несоответствие типа. Я думаю, вы получите лучшее сообщение об ошибке, если попробуете явный where jdata in ('109ec36a-42bd-42fe-9b1f-c4f479c48fda'::text, …
. Подсказка: тип jdata
не text
.
@ Берги Спасибо. Попробовал и получил ошибку operator does not exist: record = text
.
@JSONB Хорошо (чтобы убедиться, что мое подозрение подтвердилось). Вы понимаете, почему это так?
@Bergi Берги, на самом деле я не уверен. Но предложенный ниже ответ, похоже, сработал, добавив псевдоним столбца. Спасибо, что изучили это.
«jdata» — это псевдоним таблицы, а не псевдоним столбца. Вы должны назначить псевдоним столбца, а затем использовать его. Использование псевдонима таблицы, как если бы это было имя столбца, возможно, но здесь это не то, что вам нужно, и рассматривается как составной тип.
...) as jdata(col1)
where col1 in (...
Конечно, было бы лучше назначить осмысленный псевдоним, а не просто «col1».
@BarbarosÖzhan Извините, нет. Я сделал эту ошибку здесь. Tnx за указание на это