number of values updated per column

From: Willy-Bas Loos <willybas(at)gmail(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: number of values updated per column
Date: 2013-01-17 17:36:26
Message-ID: CAHnozThQL7Ws9hnjQSo3D70WWy4qN_DBmLoEs+aUVZxONHdTtQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

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

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Akihiro Okuno 2013-01-17 18:30:09 Re: number of values updated per column
Previous Message Jasen Betts 2013-01-17 10:54:21 Re: returning the number of rows output by a copy command from a function