Actually that is the application requirment to use 21 bit numbers as porting it from Oracle where it used to work.
Yeah now i have decided to use a numeric data type in a table and use that to write my own nextval and currval functions for that purpose.
Something like:
CREATE SEQUENCE some_id_seq;
CREATE TABLE foo (
some_id bit(21) DEFAULT nextval('some_id_seq')::bit(21),
t text
);
insert into foo(t) values ('a');
insert into foo(t) values ('bar');
insert into foo(t) values ('baz');
insert into foo(some_id,t) values ('100000000000000100000', 'uhh');
SELECT * FROM foo;
some_id t
--------------------- ---
000000000000000000001 a
000000000000000000010 bar
000000000000000000011 baz
100000000000000100000 uhh
(4 rows)
HTH, HAND. :)
Regards,
Dawid