Загрузка данных


WITH targets AS (
    SELECT
        'QueryAction' AS object_type,
        to_jsonb(a) ->> 'code' AS object_code
    FROM dev.query_action a
    WHERE a.id = 34715

    UNION ALL

    SELECT
        'QueryTable',
        to_jsonb(qt) ->> 'code'
    FROM dev.query_table qt
    WHERE qt.id = 34986
),
pages AS (
    SELECT
        'dev.VIEW' AS source_table,
        to_jsonb(v) ->> 'id' AS page_id,
        to_jsonb(v) ->> 'code' AS page_code,
        to_jsonb(v) ->> 'name' AS page_name,
        v.content::text AS content
    FROM dev."VIEW" v

    UNION ALL

    SELECT
        'dev_local.view',
        to_jsonb(v) ->> 'id',
        to_jsonb(v) ->> 'code',
        to_jsonb(v) ->> 'name',
        v.content::text
    FROM dev_local."view" v

    UNION ALL

    SELECT
        'dev.template_view',
        to_jsonb(v) ->> 'id',
        to_jsonb(v) ->> 'code',
        to_jsonb(v) ->> 'name',
        v.content::text
    FROM dev.template_view v
)
SELECT
    p.source_table,
    p.page_id,
    p.page_code,
    p.page_name,
    t.object_type,
    t.object_code,
    substring(
        p.content
        FROM greatest(strpos(p.content, t.object_code) - 150, 1)
        FOR 500
    ) AS matching_fragment
FROM pages p
JOIN targets t
    ON strpos(p.content, t.object_code) > 0
WHERE t.object_code IS NOT NULL
  AND t.object_code <> ''
ORDER BY p.source_table, p.page_code, t.object_type;