Thread

  1. SV: [HACKERS] Re: [BUGS] agregate function sum error

    Mattias Kregert <matti@algonet.se> — 1998-02-24T13:32:35Z

    > End users hate uneccessaries or non sense messages like the following
    > when he/she writes a sentence like this:
    > 
    >         UPDATE my_table SET my_int=my_small;
    > 
    > and PostgreSQL show him/her this message ?
    > ---------------------------------------------------------------------
    > WARN: type of my_small does not match target column my_int
    > ---------------------------------------------------------------------
    > - What message is this ? If PostgreSQL understand that I want to do:
    >    UPDATE my_table SET my_int=my_small::int4;
    > why it doesn't do that for me?
    > 
    >          SELECT my_small * my_float FROM my_table;
    > ---------------------------------------------------------------------
    > NOTICE:there is no operator * for types int2 and float8
    > NOTICE:You will either have to retype this query using an
    > NOTICE:explicit cast, or you will have to define the operator
    > WARN:* for int2 and float8 using CREATE OPERATOR
    > ---------------------------------------------------------------------
    > 
    > - Well, if PostgreSQL know what I want why it doesn't do it for me ?
    > I know that conversion is more expensive than warnning but it's more
    > friendly. What do you think? ;-)
    
    Yes, this is very annoying. If I do:
      psql=> select my_small * my_float from my_table;
    
    then my_small should be promoted to float automagically.
    
    PostgreSQL should rewrite this as "select my_small::float * my_float from
    my_table"
    so that numeric expressions always returns the "biggest" type involved.
    In most programmig languages, this is done automatically, and should be
    done
    in PostgreSQL for all calculations.
    
    
    /* m */