RedShift-PostgreSQL: ERROR: syntax error at or near "AS" Position: 42
Пробую сделать запрос в RedShift:
INSERT INTO target.table AS t (
project_id,
project_number,
project_name,
connect_project_id,
project_desc,
project_type,
project_status,
project_path,
language_code,
country_code,
timezone,
project_created_at,
project_modified_at
)
SELECT
s.id,
s.number,
s.name,
s.connect_project_id,
s.description,
s.type,
s.status,
s.path,
s.language,
s.country,
s.timezone,
s.created,
s.modified
FROM source.table AS s
ON CONFLICT (project_id)
DO UPDATE SET
(project_number, project_name, connect_project_id, project_desc,
project_type, project_status, project_path, language_code,
country_code, timezone, project_created_at, project_modified_at,
date_updated) = (EXCLUDED.project_number,
EXCLUDED.project_name, EXCLUDED.connect_project_id,
EXCLUDED.project_desc, EXCLUDED.project_type, EXCLUDED.project_status,
EXCLUDED.project_path, EXCLUDED.language_code, EXCLUDED.country_code,
EXCLUDED.timezone, EXCLUDED.project_created_at,
EXCLUDED.project_modified_at, NOW())
WHERE
t.project_number != EXCLUDED.project_number
OR t.project_name != EXCLUDED.project_name
OR t.connect_project_id != EXCLUDED.connect_project_id
OR t.project_desc != EXCLUDED.project_desc
OR t.project_type != EXCLUDED.project_type
OR t.project_status != EXCLUDED.project_status
OR t.project_path != EXCLUDED.project_path
OR t.language_code != EXCLUDED.language_code
OR t.country_code != EXCLUDED.country_code
OR t.timezone != EXCLUDED.timezone
OR t.project_created_at != EXCLUDED.project_created_at
OR t.project_modified_at != EXCLUDED.project_modified_at;
Но получаю ошибку: ERROR: syntax error at or near "AS" Position: 42
Что-то не могу понять, что не так. Может кто-то знает?
Ответы (1 шт):
Автор решения: Viktor Andriichuk
→ Ссылка
Я понял, что RedShift не принимает некоторые моменты, такие как AS в INSERT, или же ON CONFLICT.
Поэтому заменил этот запрос следующим:
begin transaction;
update target
set col1 = stage.col1,
col2 = stage.col2,
col3 = 'expression'
from stage
where target.primarykey = stage.primarykey
and target.distkey = stage.distkey
and target.col3 > 'last_update_time'
and (target.col1 != stage.col1
or target.col2 != stage.col2
or target.col3 = 'filter_expression');
insert into target
(select col1, col2, 'expression'
from stage);
end transaction;
Взял с официальной документации RedShift.