Re: Postgres 7.3.5 and count('x')

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Postgres 7.3.5 and count('x')
Дата
Msg-id 14295.1070735454@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Postgres 7.3.5 and count('x')  (Peter Eisentraut <peter_e@gmx.net>)
Список pgsql-hackers
Peter Eisentraut <peter_e@gmx.net> writes:
> In general,
> SELECT count(expr) FROM table1;
> counts the number of rows in table1 where expr evaluates to not null.  

Right.  Edwin obscured the datatype issue by leaving off a table, but
the issue is real anyway:

regression=# select count(1) from tenk1;count
-------10000
(1 row)

regression=# select count('x') from tenk1;
ERROR:  cannot accept a value of type any

We need to do something about that, I think.  The "long form" solution
would be to cause 'x' to be promoted to type text in this context, but
I think it may be enough to remove the elog() in any_in() and just let
a dummy value be returned.

> If table1 is not specified, that rule no longer holds.  At best you 
> could assume that table1 is empty and return 0.  But a result of 1 I 
> cannot see justified.

Mumble.  An Oracle person would say that our locution 
"SELECT expression" is a shorthand for "SELECT expression FROM dual"
(or whatever the name of that standard one-row table of theirs is).
With that understanding, the behavior of "SELECT count(1)" is entirely
proper.  If you assume that "SELECT expression" means to select from
a dummy table of no rows, then it should produce no result rows,
which would be pretty useless.  So I don't see the argument for saying
that count() should produce zero in that case.

I could see an argument for putting in a special case to error out if
an aggregate appears in this context ... but the current behavior seems
perfectly okay to me.  Except for the datatype problem.
        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Richard Schilling
Дата:
Сообщение: Fwd: Double linked list with one pointer [mendola@bigfoot.com]
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Double linked list with one pointer