2014-09-06 15:12 GMT+02:00 Joel Jacobson <j...@trustly.com>: > On Sat, Sep 6, 2014 at 6:59 AM, Pavel Stehule <pavel.steh...@gmail.com> > wrote: > > People can prepare a simple functions like you did: > > > > ... > > > > CREATE OR REPLACE FUNCTION user_list () > > RETURNS SETOF id AS $$ > > BEGIN > > RETURN QUERY SELECT id FROM user WHERE .. some = $1 > > END; > > $$ LANGUAGE plpgsql; > > > > CREATE OR REPLACE FUNCTION update_user(int) > > RETURNS void AS $$ > > BEGIN > > UPDATE user SET .. WHERE id = $1 > > END; > > $$ LANGUAGE; > > > > And then use it in mass operations: > > > > BEGIN > > FOR company IN SELECT * FROM company_list() > > LOOP > > FOR id IN SELECT * FROM user_list(company) > > LOOP > > update_user(id); > > END LOOP; > > > > Or use it in application same style. > > > > It is safe .. sure, and I accept it. But It is terrible slow. > > The above is horrible and ugly. That's not how I write code. > Only for top-level functions, i.e. API-functions, is it motivated to > encapsulate even simple queries like that, but *never* in other > PL-functions, as that doesn't fulfil any purpose, putting simple > queries inside functions only make it less obvious what the code does > where you have a function call instead of a SQL-query. >
It is ugly, but I meet it. Its nothing special. Pavel