Thread: How to force Postgres to calculate MAX(boolean)

How to force Postgres to calculate MAX(boolean)

From
"Andrus"
Date:
I try to convert code from other database to Postgres.

CREATE TABLE test(test BOOLEAN);
SELECT MAX(test) FROM test;

causes error

ERROR:  function max(boolean) does not exist
HINT:  No function matches the given name and argument types. You may need
to add explicit type casts.

I tried
SELECT MAX(test:integer)::boolean FROM test;

but this casuses error

ERROR:  cannot cast type boolean to integer

I have lot of MAX() functions applied to boolean expressions.

How to force Postgres to calculate MAX(boolean) ?

MAX(boolean) should return true if its argument evaluates true for at least
one row.



Re: How to force Postgres to calculate MAX(boolean)

From
Tom Lane
Date:
"Andrus" <noeetasoftspam@online.ee> writes:
> MAX(boolean) should return true if its argument evaluates true for at least
> one row.

We call it bool_or() ...

            regards, tom lane

Re: How to force Postgres to calculate MAX(boolean)

From
Ropel
Date:
Andrus wrote:

>I try to convert code from other database to Postgres.
>
>CREATE TABLE test(test BOOLEAN);
>SELECT MAX(test) FROM test;
>
>causes error
>
>ERROR:  function max(boolean) does not exist
>HINT:  No function matches the given name and argument types. You may need
>to add explicit type casts.
>
>I tried
>SELECT MAX(test:integer)::boolean FROM test;
>
>but this casuses error
>
>ERROR:  cannot cast type boolean to integer
>
>I have lot of MAX() functions applied to boolean expressions.
>
>How to force Postgres to calculate MAX(boolean) ?
>MAX(boolean) should return true if its argument evaluates true for at least
>one row.
>
>
Use bool_or(boolean)  instead.
Bye




Re: How to force Postgres to calculate MAX(boolean)

From
Christopher Browne
Date:
> I try to convert code from other database to Postgres.
>
> CREATE TABLE test(test BOOLEAN);
> SELECT MAX(test) FROM test;
>
> causes error
>
> ERROR:  function max(boolean) does not exist
> HINT:  No function matches the given name and argument types. You may need
> to add explicit type casts.
>
> I tried
> SELECT MAX(test:integer)::boolean FROM test;
>
> but this casuses error
>
> ERROR:  cannot cast type boolean to integer
>
> I have lot of MAX() functions applied to boolean expressions.
>
> How to force Postgres to calculate MAX(boolean) ?
>
> MAX(boolean) should return true if its argument evaluates true for at least
> one row.
>

Have you looked into creating a suitable aggregate function yourself?

\h CREATE AGGREGATE

http://www.postgresql.org/docs/current/static/xaggr.html
--
output = reverse("gro.gultn" "@" "enworbbc")
http://linuxdatabases.info/info/rdbms.html
"The  test of a  principle  is whether it  applies  even to people you
don't like." -- Henry Spencer