Hi, I'd like to know, per column, how many values were changed by my query. I have a working example, but i am curious what you people think about it. Is it efficient? I have to make a self join, but i don't see a faster way.
Here's the example: ------------- drop table if exists tab1 ; create table tab1(id serial primary key, a integer, b integer, c integer); insert into tab1 (a,b,c) select x*random(), x*random(), x*random() from generate_series(0,100) foo(x); with foo as ( update tab1 set a=case when tab1.a >= 60 then -1 else tab1.a end , b=case when tab1.b >= 60 then -1 else tab1.b end , c=case when tab1.c >= 60 then -1 else tab1.c end from tab1 old where old.id=tab1.id returning case when tab1.a != old.a then 1 else 0 end as a_upd , case when tab1.b != old.b then 1 else 0 end as b_upd , case when tab1.c != old.c then 1 else 0 end as c_upd ) select 'a' as fieldname, sum(a_upd) as updates from foo union all select 'b' as fieldname, sum(b_upd) as updates from foo union all select 'c' as fieldname, sum(c_upd) as updates from foo ------------- Cheers, WBL -- "Quality comes from focus and clarity of purpose" -- Mark Shuttleworth