Мне нужно обновить некоторые строки таблиц, а затем отобразить эти строки. Есть ли способ сделать это с помощью одного запроса и избежать этого запроса? :
UPDATE table SET foo=1 WHERE boo=2 SELECT * from table WHERE ( foo=1 ) AND ( boo=2 )
В PostgreSQL v8.2 и новее вы можете сделать это, используя RETURNING
:
UPDATE table SET foo=1 WHERE boo=2 RETURNING *
Вы можете использовать хранимую процедуру в PL / pgSQL. Взгляните на [docs] [1]
Что-то вроде этого
CREATE FUNCTION run(fooVal int, booVal int) RETURNS TABLE(fooVal int, booVal int) AS $$ BEGIN UPDATE table SET foo = fooVal WHERE boo= booVal; RETURN QUERY SELECT fooVal, booVal from table WHERE ( foo = fooVal ) AND ( boo = booVal ); END; $$ LANGUAGE plpgsql;
Вы сохраните время для отправки другого заявления. Это не должно быть узким местом производительности. Короткий ответ: просто используйте два запроса. Все в порядке, и так вы делаете это в SQL.
[1]: http://www.postgresql.org/docs/8.4/static/plpgsql.html документы
Вы можете использовать хранимую процедуру или функцию. Он будет содержать ваши запросы.