RedShift: не могу правильно сконвертировать запрос из PostgreSQL

У меня есть такой работающий запрос в PostgreSQL:

INSERT INTO target.table AS t (
        collect_project_id,
        prompt_type,
        prompt_input_desc,
        prompt_input_name,
        prompt_input_value,
        script_id,
        corpuscode)
    SELECT s.projectid,
           max(s.prompttype),
           max(el.inputs->>'name') AS name,
           max(el.inputs->>'desc') AS description,
           v.value,
           max(s.scriptid),
           max(s.corpuscode)
    FROM source.table AS s
       CROSS JOIN LATERAL jsonb_array_elements(s.inputs::jsonb) AS el(inputs)
       CROSS JOIN LATERAL jsonb_array_elements(el.inputs->'values') AS v(value)
    WHERE
        s.prompttype = 'input' AND (s.created > now() - interval '30 minutes' OR s.modified > now() - interval '30 minutes')
    GROUP BY s.projectid, v.value
    ON CONFLICT
        (prompt_input_value, collect_project_id)
    DO UPDATE SET
        (prompt_input_desc, prompt_input_name, date_updated) =
        (EXCLUDED.prompt_input_desc,
        EXCLUDED.prompt_input_name,
        NOW())
    WHERE t.prompt_input_desc != EXCLUDED.prompt_input_desc
        OR t.prompt_input_name != EXCLUDED.prompt_input_name;

У RedShift есть ряд ограничений, в частности нельзя использовать ON CONFLICT, следовательно нужно переписать запрос.

Делаю так:

-- target.table
begin transaction;

-- Update records
UPDATE target.table AS t
SET prompt_input_desc = max(el.inputs->>'desc') AS description, prompt_input_name = max(el.inputs->>'name') AS name, date_updated = getdate()       
FROM source.table AS s
       CROSS JOIN LATERAL jsonb_array_elements(s.inputs::jsonb) AS el(inputs)
       CROSS JOIN LATERAL jsonb_array_elements(el.inputs->'values') AS v(value)
WHERE t.collect_project_id = s.projectid AND (s.created > getdate() - interval '30 minutes' OR s.modified > getdate() - interval '30 minutes')
GROUP BY s.projectid, v.value;

-- Insert records
INSERT INTO target.table (
        collect_project_id,
        prompt_type,
        prompt_input_desc,
        prompt_input_name,
        prompt_input_value,
        script_id,
        corpuscode)
    SELECT s.projectid,
           max(s.prompttype),
           max(el.inputs->>'name') AS name,
           max(el.inputs->>'desc') AS description,
           v.value,
           max(s.scriptid),
           max(s.corpuscode)
    FROM source.table AS s
       CROSS JOIN LATERAL jsonb_array_elements(s.inputs::jsonb) AS el(inputs)
       CROSS JOIN LATERAL jsonb_array_elements(el.inputs->'values') AS v(value)
    WHERE
        s.prompttype = 'input' AND (s.created > getdate() - interval '30 minutes' OR s.modified > getdate() - interval '30 minutes')
    GROUP BY s.projectid, v.value

end transaction;

Выдает ошибку: ERROR: syntax error at or near "AS" Position: 117

Можете подсказать где ошибся и как правильно?

Спасибо.


Ответы (0 шт):