обновить таблицу с указанными 4 столбцами, но доступно только 2 столбца

У меня есть одна таблица под названием test, которая имеет 4 столбца:

id INT v_out INT v_in INT label CHARACTER 

Я пытаюсь обновить таблицу следующим запросом:

 String sql = " update test set v_out = temp.outV , v_in = temp.inV , label = temp.label from ( values( (1,234,235,'abc') ,(2,234,5585,'def') ) ) as temp (e_id, outV, inV, label) where id = temp.e_id "; 

Когда я его выполнил, я получил ошибку:

org.postgresql.util.PSQLException: ОШИБКА:

  table "temp" has 2 columns available but 4 columns specified 

В чем проблема, и как я могу ее решить?

Значения для предложения values не должны быть заключены в круглые скобки:

 values ( (1,234,235,'abc'), (2,234,5585,'def') ) 

создает одну строку с двумя столбцами. Каждый столбец является анонимной «записью» с 4 полями.

Вы хотите:

 from ( values (1,234,235,'abc'), (2,234,5585,'def') ) as temp (e_id, outV, inV, label) 

SQLFiddle показывает разницу: http://sqlfiddle.com/#!15/d41d8/2763

Это поведение документировано, но этого довольно сложно найти:
http://www.postgresql.org/docs/current/static/rowtypes.html#AEN7362

Это по сути то же самое, что и select (col1, col2) from some_table или select col1, col2 from some_table . Первый возвращает один столбец с анонимным составным типом, который имеет два поля. Второй возвращает два столбца из таблицы.