そのため、テーブル内の特定の行を見つけ、返される結果に行を保存し、行を削除してから結果を返すプロシージャを作成しようとしています。
私がなんとかして最善を尽くしたのは、次のことでした。
CREATE OR REPLACE FUNCTION sth(foo integer)
RETURNS TABLE(a integer, b integer, ... other fields) AS $$
DECLARE
to_delete_id integer;
BEGIN
SELECT id INTO to_delete_id FROM my_table WHERE sth_id = foo LIMIT 1;
RETURN QUERY SELECT * FROM my_table WHERE sth_id = foo LIMIT 1;
DELETE FROM my_table where id = to_delete_id;
END;
$$ LANGUAGE plpgsql;
ご覧のとおり、SELECT
ほとんど同じことを行う 2 つの操作があります (追加のオーバーヘッド)。2番目だけをSELECT
設定して、to_delete_id
後で行を削除できるようにする方法はありますか?