Как ОБНОВИТЬ и ВЫБРАТЬ одновременно - PullRequest
5 голосов
/ 29 мая 2010

Мне нужно обновить некоторые строки таблиц и затем отобразить эти строки. Есть ли способ сделать это с помощью одного запроса и избежать этого 2 запроса? :

UPDATE table SET foo=1 WHERE boo=2

SELECT * from table WHERE ( foo=1 ) AND ( boo=2 )

Ответы [ 3 ]

18 голосов
/ 29 мая 2010

В PostgreSQL v8.2 и новее вы можете сделать это, используя RETURNING:

UPDATE table
SET foo=1
WHERE boo=2
RETURNING *
2 голосов
/ 29 мая 2010

Вы можете использовать хранимую процедуру в PL / pgSQL.Взгляните на [документы] [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 документы

1 голос
/ 29 мая 2010

Вы можете использовать хранимую процедуру или функцию. Он будет содержать ваши запросы.

...