Thread: count(*) from view??

count(*) from view??

From
Greg Brzezinski
Date:
create table test (id int, user_name char(30));
insert into test values (1, 'John');
insert into test values (2, 'George');

create view v_test as select * from test where user_name = 'John';

select count(*) from v_test;
 count
-------
     2
(1 row)      Why?...Should returns 1

select count(*) from test where user_name = 'John';
 count
-------
     1
(1 row)

--Greg--


Re: count(*) from view??

From
Marcin Mazurek
Date:
Greg Brzezinski (gregb@amg.gda.pl) napisał:
> create table test (id int, user_name char(30));
> insert into test values (1, 'John');
> insert into test values (2, 'George');
> create view v_test as select * from test where user_name = 'John';
> select count(*) from v_test;
>  count
> -------
>      2
> (1 row)      Why?...Should returns 1
I've noticed the same.

Marcin Mazurek

--
Kierownik Działu Systemowego
MULTINET SA o/Poznan
http://www.multinet.pl/

Re: count(*) from view??

From
Tom Lane
Date:
Greg Brzezinski <gregb@amg.gda.pl> writes:
> create table test (id int, user_name char(30));
> insert into test values (1, 'John');
> insert into test values (2, 'George');

> create view v_test as select * from test where user_name = 'John';

> select count(*) from v_test;
>  count
> -------
>      2
> (1 row)      Why?...Should returns 1

Yup, it should, and 1 is indeed what I get.  How old a version of
Postgres are you using?  I think there used to be bugs like this
a few versions back...

            regards, tom lane

Re: count(*) from view??

From
Stephan Szabo
Date:
What version are you using?  Current sources
give me 1 for the select count(*) from v_test;
on the same sequence.

Stephan Szabo
sszabo@bigpanda.com

On Fri, 8 Sep 2000, Greg Brzezinski wrote:

> create table test (id int, user_name char(30));
> insert into test values (1, 'John');
> insert into test values (2, 'George');
>
> create view v_test as select * from test where user_name = 'John';
>
> select count(*) from v_test;
>  count
> -------
>      2
> (1 row)      Why?...Should returns 1
>
> select count(*) from test where user_name = 'John';
>  count
> -------
>      1
> (1 row)



RE: count(*) from view??

From
"Sean Carmody"
Date:
Some time ago, I also had similar problems involving sums and maxes within
a view. When I posted a query about the max problem, the response
was that "The rule rewriter has a lot of problems with views that involve
grouping
or aggregation --- until it's fixed, you need to be very wary of that
combination of features".

(Full reply at
http://www.postgresql.org/mhonarc/pgsql-bugs/1999-11/msg00009.html)

Now I'm not sure what the current state of development in that regard is,
but judging
from your experience, it looks like there's still a problem.

Not much help I'm sure, but there you go.

Sean.


> -----Original Message-----
> From: pgsql-general-owner@hub.org [mailto:pgsql-general-owner@hub.org]On
> Behalf Of Greg Brzezinski
> Sent: Friday, 8 September 2000 11:32 PM
> To: pgsql-general@postgresql.org
> Subject: [GENERAL] count(*) from view??
>
>
> create table test (id int, user_name char(30));
> insert into test values (1, 'John');
> insert into test values (2, 'George');
>
> create view v_test as select * from test where user_name = 'John';
>
> select count(*) from v_test;
>  count
> -------
>      2
> (1 row)      Why?...Should returns 1
>
> select count(*) from test where user_name = 'John';
>  count
> -------
>      1
> (1 row)
>
> --Greg--
>
>


RE: count(*) from view??

From
"Sean Carmody"
Date:
I've now tested your problem on the 7.0.2 and the problem doesn't
seem to arise there, so it looks as though the problems with the
rule rewriter have been fixed. Maybe you should try upgrading.

Regards,
Sean.

> -----Original Message-----
> From: pgsql-general-owner@hub.org [mailto:pgsql-general-owner@hub.org]On
> Behalf Of Greg Brzezinski
> Sent: Friday, 8 September 2000 11:32 PM
> To: pgsql-general@postgresql.org
> Subject: [GENERAL] count(*) from view??
>
>
> create table test (id int, user_name char(30));
> insert into test values (1, 'John');
> insert into test values (2, 'George');
>
> create view v_test as select * from test where user_name = 'John';
>
> select count(*) from v_test;
>  count
> -------
>      2
> (1 row)      Why?...Should returns 1
>
> select count(*) from test where user_name = 'John';
>  count
> -------
>      1
> (1 row)
>
> --Greg--
>
>