Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Auto Increment Alpha-Numeric value in postgresql?

I am using "PostgreSQL 9.3.5"

I have a Table(StackOverflowTable) with columns (SoId,SoName,SoDob).

I want a Sequence generator for column SoId which is a Alpha-numeric value.

I want to auto increment a Alpha-Numeric Value in postgresql.

For eg : SO10001, SO10002, SO10003.....SO99999.

Edit:

If tomorrow i need to generate a Sequence which can be as SO1000E100, SO1000E101,... and which has a good performance. Then what is the best solution!

like image 668
09Q71AO534 Avatar asked Nov 25 '14 07:11

09Q71AO534


2 Answers

You can define default value of your column as a concatenation of S and a normal sequence as bellow:

CREATE SEQUENCE sequence_for_alpha_numeric
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;


CREATE TABLE table1
(
  alpha_num_auto_increment_col character varying NOT NULL,
  sample_data_col character varying,
  CONSTRAINT table1_pkey PRIMARY KEY (alpha_num_auto_increment_col)
)
;

ALTER TABLE table1 ALTER COLUMN alpha_num_auto_increment_col SET DEFAULT TO_CHAR(nextval('sequence_for_alpha_numeric'::regclass),'"S"fm000000');

Test:

                          ^
insert into table1 (sample_data_col) values ('test1');
insert into table1 (sample_data_col) values ('test2');
insert into table1 (sample_data_col) values ('test3');

select * from table1;
 alpha_num_auto_increment_col | sample_data_col
------------------------------+-----------------
 S000001                      | test1
 S000002                      | test2
 S000003                      | test3
(3 lignes)

How to use sequences

How to use to_char function.

like image 142
Houari Avatar answered Sep 19 '22 03:09

Houari


Use sequences and default value for id:

postgres=# CREATE SEQUENCE xxx;
CREATE SEQUENCE
postgres=# SELECT setval('xxx', 10000);
 setval 
--------
  10000
(1 row)

postgres=# CREATE TABLE foo(id text PRIMARY KEY 
                                    CHECK (id ~ '^SO[0-9]+$' ) 
                                    DEFAULT 'SO'  || nextval('xxx'), 
                            b integer);
CREATE TABLE
postgres=# insert into foo(b) values(10);
INSERT 0 1
postgres=# insert into foo(b) values(20); 
INSERT 0 1
postgres=# SELECT * FROM foo;
   id    | b  
---------+----
 SO10001 | 10
 SO10002 | 20
(2 rows)
like image 23
Pavel Stehule Avatar answered Sep 20 '22 03:09

Pavel Stehule