Это запрос, который я пытаюсь выполнить для обновления нескольких строк по их идентификатору в одной строке. Я использую AWS RedShift (который основан на очень старой версии PostgreSQL):Ошибка синтаксиса Amazon Redshift при использовании UPDATE по указанным VALUE
UPDATE promotion
SET engagements = c.engagements
FROM (VALUES (668, 73), (684, 135), (680, 73), (672, 76), (682, 94),
(676, 4), (670, 81), (686, 104), (678, 1), (674, 0)
) AS c(id, engagements)
WHERE c.id = promotion.id;
И это ошибка производится:
sqlalchemy.exc.ProgrammingError: (pg8000.core.ProgrammingError) (u'ERROR',
u'42601', u'syntax error at or near ","', u'72', u'/home/ec2-
user/padb/src/pg/src/backend/parser/parser_scan.l', u'699', u'yyerror', u'',
u'')
[SQL: 'UPDATE promotion SET engagements = c.engagements FROM (VALUES
(668, 73), (684, 135), (680, 73), (672, 76), (682, 94), (676, 4), (670, 81),
(686, 104), (678, 1), (674, 0)) AS c(id, engagements) WHERE c.id =
promotion.id;']
EDIT: Используя формат запроса от ответа здесь: Update multiple rows in same query using PostgreSQL
@ jarcobi889 Да, исправлено. – jstudios
Это просто удар в темноту от взгляда на чужой код в Интернете, но разве формат обычно не помещает VALUES снаружи закрывающей скобки? : FROM VALUES ((668, 73), (684, 135) ... и т. Д. – jarcobi889
Из [неподдерживаемых функций Postgres] (http://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql- features.html): «* Список VALUES, используемый как постоянные таблицы *» –