如何将记录类型转换为 jsonb 或使用一些操作器,例如 <@ bewteen jsonb 并在 postgresql 中记录?



我正在使用postgresql 10.6并遇到了一些问题。我试图在 pg 中使用 <@,但它提醒我"运算符不存在:jsonb <@ record"。

我使用jsonb_to_set将 jsonb 转换为记录,但记录不支持 <@。

owner_org js jsonb 类型,如 [1, 2, 3]

SELECT
    org."name" AS NAME,
    COUNT ( * ) AS num 
FROM
    project
    LEFT JOIN "user" ON "user"."id" = (
    SELECT
    to_number( OPERATOR ->> 'id', '99999999' ))
    LEFT JOIN org ON (
    SELECT
    to_number( "user".org_id ->> 0, '99999999' )) = org."id" 
WHERE
    OPERATOR ->> 'id' <> '0' 
    AND project.deleted_at IS NULL 
    AND project.created_at >= '2018-01-20 14:00:00' 
    AND project.created_at <= '2018-09-29 17:00:00' 
    AND project.deleted_at IS NULL 
    AND owner_org::jsonb  <@ (
        '16',
        '20',
        '22',
        '23',
        '24',
        '25',
        '26',
        '27',
        '28',
        '29',
        '30',
        '31',
        '32',
        '33' 
    ) 
GROUP BY
    org."name"

我希望"Org_A"1 的输出,但实际输出是

LINE 18:  AND jsonb_to_record(owner_org)  <@ (
                                          ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

('16', '20', ...)是PostgreSQL中的行文字,但<@运算符("contains"(希望在两边都有jsonb。如果你在右侧使用JSON数组,你应该有更好的运气:

owner_org::jsonb <@ '["16","20","22", ...]'::jsonb

最新更新