Thread

  1. BUG #2802: Feature request: tinyint and unsigned types

    Albert Strasheim <fullung@gmail.com> — 2006-12-01T20:41:32Z

    The following bug has been logged online:
    
    Bug reference:      2802
    Logged by:          Albert Strasheim
    Email address:      fullung@gmail.com
    PostgreSQL version: 8.1
    Operating system:   Windows
    Description:        Feature request: tinyint and unsigned types
    Details: 
    
    MySQL's support for 1-byte integers and unsigned types are very useful in
    some applications where it makes sense to express certain values as 1-byte
    values or as unsigned values. Having support for this in PostgreSQL would be
    awesome.
    
    Yes, bigger types can be used, but they introduce additional storage
    requirements that maybe be excessive in certain situations.
    
    http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
    
    Thanks!
    
    Cheers,
    
    Albert Strasheim
    
    
  2. Re: BUG #2802: Feature request: tinyint and unsigned types

    Bruno Wolff III <bruno@wolff.to> — 2006-12-04T22:11:17Z

    On Fri, Dec 01, 2006 at 20:41:32 +0000,
      Albert Strasheim <fullung@gmail.com> wrote:
    > 
    > Description:        Feature request: tinyint and unsigned types
    
    You can already use "char" to store 1 byte values, though unless there are
    several of these in a row, you won't save any space because of alignment.
    
    There are also people working on a nicer way to do enum, that looked to
    be relatively space efficient (though I don't remember if there was going
    to be a way to store small sets using only one byte). This got discussed
    a while ago, but didn't make it into 8.2 (as far as I can tell).
    
    Depending on what you are really trying to do, bit strings may also be
    useful for you. While individual bit string columns aren't going to fit
    in one byte, you can pack bits together which might be a saving over all.
    
    Postgres is extensible, so you can add your one 1 byte types without
    doing too much work.
    
    
  3. Re: BUG #2802: Feature request: tinyint and unsigned types

    decibel <decibel@decibel.org> — 2006-12-09T02:25:02Z

    On Dec 4, 2006, at 4:11 PM, Bruno Wolff III wrote:
    > You can already use "char" to store 1 byte values, though unless  
    > there are
    > several of these in a row, you won't save any space because of  
    > alignment.
    
    <nitpick>There's also boolean...</nitpick>
    
    Is there any technical reason why we don't support unsigned ints or  
    tinyint? Just a matter of no one feeling the itch?
    --
    Jim Nasby                                            jim@nasby.net
    EnterpriseDB      http://enterprisedb.com      512.569.9461 (cell)
    
    
    
    
  4. Re: BUG #2802: Feature request: tinyint and unsigned types

    Tom Lane <tgl@sss.pgh.pa.us> — 2006-12-09T06:37:48Z

    Jim Nasby <decibel@decibel.org> writes:
    > Is there any technical reason why we don't support unsigned ints or  
    > tinyint? Just a matter of no one feeling the itch?
    
    The question is whether it's worth complicating the numeric-type
    promotion hierarchy even more.  A variant int type probably isn't worth
    much if it doesn't interact naturally with arithmetic & comparisons with
    other int types, but we've found out the hard way that you can't have a
    huge number of possible interpretations, or you get too many "can't
    resolve which operator to use" errors.  (See the archives for details.)
    
    My private suspicion is that 90% of the people who say they want tinyint
    are really looking for a enum type, and thus that Tom Dunstan's recent
    patch for enum support might solve their problem.  (Did Tom's patch
    allow for the storage size to vary depending on the number of values?
    Those folk won't be satisfied if not, even though we all know that
    alignment issues frequently negate any savings...)
    
    As for unsigned, you can use OID as uint4 if you must.
    
    			regards, tom lane
    
    
  5. Re: BUG #2802: Feature request: tinyint and unsigned types

    Albert Strasheim <fullung@gmail.com> — 2006-12-09T15:44:51Z

    Hello all,
    
    Firstly, thanks for taking the time to evaluate my request.
    
    On Sat, 09 Dec 2006, Tom Lane wrote:
    
    > Jim Nasby <decibel@decibel.org> writes:
    > > Is there any technical reason why we don't support unsigned ints or  
    > > tinyint? Just a matter of no one feeling the itch?
    > 
    > The question is whether it's worth complicating the numeric-type
    > promotion hierarchy even more.  A variant int type probably isn't worth
    > much if it doesn't interact naturally with arithmetic & comparisons with
    > other int types, but we've found out the hard way that you can't have a
    > huge number of possible interpretations, or you get too many "can't
    > resolve which operator to use" errors.  (See the archives for details.)
    > 
    > My private suspicion is that 90% of the people who say they want tinyint
    > are really looking for a enum type, and thus that Tom Dunstan's recent
    > patch for enum support might solve their problem.  (Did Tom's patch
    > allow for the storage size to vary depending on the number of values?
    > Those folk won't be satisfied if not, even though we all know that
    > alignment issues frequently negate any savings...)
    
    Agreed. Some variables I had wanted to make tinyints could be expressed 
    as enumerated values. Other variables I wanted to express as unsigned 
    ints or tinyints or unsigned tinyints to model the possible values 
    from the problem domain as succinctly as possible.
    
    I wasn't aware of alignment issues negating the savings I was hoping to 
    achieve. A discussion in the data types section of the user manual 
    about alignment issues as would have set me straight.
    
    > As for unsigned, you can use OID as uint4 if you must.
    
    Agreed. I could also use chars for 1-byte values, but my data really are 
    numbers, not characters. Again, I was trying to write a schema that 
    models the problem domain as accurately as possible, data types and 
    all. I'm guessing here, but using "incorrect" data types probably runs 
    you into an interesting set of problems when you start accessing your 
    database through JDBC or higher level things like an ORM library. Now 
    you have to explain to this library that, while your schema says char, 
    you really meant unsigned tinyint.
    
    Thanks for everyone's inputs.
    
    Regards,
    
    Albert Strasheim
    
    
  6. Re: BUG #2802: Feature request: tinyint and unsigned types

    Peter Eisentraut <peter_e@gmx.net> — 2006-12-10T20:22:41Z

    Albert Strasheim wrote:
    > Agreed. Some variables I had wanted to make tinyints could be
    > expressed as enumerated values. Other variables I wanted to express
    > as unsigned ints or tinyints or unsigned tinyints to model the
    > possible values
    > from the problem domain as succinctly as possible.
    
    Then use domains.
    
    -- 
    Peter Eisentraut
    http://developer.postgresql.org/~petere/
    
    
  7. Re: BUG #2802: Feature request: tinyint and unsigned types

    Stephen Frost <sfrost@snowman.net> — 2006-12-10T21:13:59Z

    * Peter Eisentraut (peter_e@gmx.net) wrote:
    > Albert Strasheim wrote:
    > > Agreed. Some variables I had wanted to make tinyints could be
    > > expressed as enumerated values. Other variables I wanted to express
    > > as unsigned ints or tinyints or unsigned tinyints to model the
    > > possible values
    > > from the problem domain as succinctly as possible.
    > 
    > Then use domains.
    
    Or constraints...
    
    	Stephen