Периодическая ошибка PostgreSQL: отсутствует предложение FROM

У меня есть приложение Rails, работающее на Heroku, которое периодически выдает ошибки Postgres «отсутствует FROM-clause» из обновлений, выполняемых задачей Rake.

Пример инструкции UPDATE:

UPDATE "temp_stats_values" 
    SET "number" = 66, 
        "average" = 0, 
        "percentage" = 0, 
        "num_out_of" = 0, 
        "updated_at" = '2013-01-12 11:43:40.067530' 
WHERE "temp_stats_values"."id" = 1330

И выдается ошибка:

ActiveRecord::StatementInvalid: PG::Error: ERROR: missing FROM-clause entry for table "temp_stats_values"

Дело в том, что я не знаю, почему он ожидает предложение FROM для этого SQL, когда явно не задействована другая таблица. Кроме того, тот факт, что это кажется прерывистым, довольно сбивает с толку. Ошибки, когда они случаются, перехватываются Airbrake.

В любом случае, если у кого-то есть хорошие идеи, я был бы очень благодарен.


ОБНОВЛЕНИЕ

Пример SQL Fiddle, который работает должным образом


person Jerome    schedule 12.01.2013    source источник
comment
Можете ли вы дать определение таблицы и некоторые тестовые данные? Предпочтительно в SQLFiddle.   -  person Ihor Romanchenko    schedule 12.01.2013
comment
Хорошая идея Игорь, к сожалению, работает как положено   -  person Jerome    schedule 13.01.2013
comment
Я не знаю грабли, но выстрел в темноту: добавить точку с запятой? Или корреляционное имя (псевдоним) и используйте его.   -  person wildplasser    schedule 13.01.2013
comment
О, это можно было бы просто исправить. Хорошая мысль. Проблема в том, что SQL в настоящее время является результатом вызова Rails update_attributes через драгоценный камень PG, но я думаю, что мог бы свернуть свой собственный, поскольку я щедро разбрасываю «Coding Horror SQL» в остальной части этой конкретной задачи Rake...   -  person Jerome    schedule 13.01.2013
comment
Вы откуда-то получаете параметры и собираете полный оператор? Возможно, иногда параметры содержат мусор (иначе SQL-инъекция), и поэтому оператор становится недействительным. Вместо этого попробуйте использовать подготовленные операторы (не знаю термина в Ruby)   -  person a_horse_with_no_name    schedule 13.01.2013
comment
Хорошая мысль, но все довольно структурировано, без участия пользователя. Приведенный выше пример фактически дал сбой при запуске на сервере.   -  person Jerome    schedule 13.01.2013


Ответы (1)


Таким образом, без какого-либо вмешательства эти ошибки волшебным образом исчезли, точно так же, как они волшебным образом начали происходить в первую очередь. Пугающий. В любом случае, спасибо всем, кто прокомментировал.

person Jerome    schedule 17.01.2013