Thread: BUG #3668: type error in serial

BUG #3668: type error in serial

From
"Eric Weimer"
Date:
The following bug has been logged online:

Bug reference:      3668
Logged by:          Eric Weimer
Email address:      eweimer@thelocalphonecompany.net
PostgreSQL version: 8.1
Operating system:   Linux
Description:        type error in serial
Details:

Creating a table with a column of type serial causes the creation of a
sequence tied as the default value for the column.
The actual type of the column is integer, however the sequence created is of
type bigint. If the sequence is created as a bigint, then the column should
also be defined as bigint.

Example:
dev=# create temp table testing (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "testing_id_seq" for
serial column "testing.id"
CREATE TABLE
dev=# \d testing_id_seq
Sequence "pg_temp_1.testing_id_seq"
    Column     |  Type
---------------+---------
 sequence_name | name
 last_value    | bigint
 increment_by  | bigint
 max_value     | bigint
 min_value     | bigint
 cache_value   | bigint
 log_cnt       | bigint
 is_cycled     | boolean
 is_called     | boolean

dev=# \d testing
                        Table "pg_temp_1.testing"
 Column |  Type   |                      Modifiers
--------+---------+------------------------------------------------------
 id     | integer | not null default nextval('testing_id_seq'::regclass)

Re: BUG #3668: type error in serial

From
Tom Lane
Date:
"Eric Weimer" <eweimer@thelocalphonecompany.net> writes:
> Creating a table with a column of type serial causes the creation of a
> sequence tied as the default value for the column.
> The actual type of the column is integer, however the sequence created is of
> type bigint. If the sequence is created as a bigint, then the column should
> also be defined as bigint.

This is not a bug, primarily because we have only one size of sequence.

            regards, tom lane

Re: BUG #3668: type error in serial

From
Dave Johansen
Date:
On Wednesday, October 10, 2007 2:32:17 PM UTC-7, Tom Lane wrote:
> "Eric Weimer" <eweimer@thelocalphonecompany.net> writes:
> > Creating a table with a column of type serial causes the creation of a
> > sequence tied as the default value for the column.
> > The actual type of the column is integer, however the sequence created =
is of
> > type bigint. If the sequence is created as a bigint, then the column sh=
ould
> > also be defined as bigint.=20
>=20
> This is not a bug, primarily because we have only one size of sequence.
>=20
>             regards, tom lane
>=20
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings

I believe that the SERIAL type should set the MAXVALUE appropriately (that =
of a 32 bit number) because then it could give an error like "reached maxim=
um value of sequence" rather than having people beating their heads against=
 the wall because they can't figure out why they're getting an error of "in=
teger out of range". That seems like a relatively minor change that could s=
ave people a LOT of headache.

Dave