12 Stimmen

Wie inkrementiere ich einen alphanumerischen Wert automatisch in PostgreSQL?

Ich benutze "PostgreSQL 9.3.5"

Ich habe eine Tabelle (StackOverflowTable) mit Spalten (SoId,SoName,SoDob).

Ich möchte einen Sequenzgenerator für die Spalte SoId, die einen alphanumerischen Wert ist.

Ich möchte einen alphanumerischen Wert in PostgreSQL automatisch erhöhen.

Zum Beispiel: SO10001, SO10002, SO10003.....SO99999.

Bearbeiten:

Wenn ich morgen eine Sequenz generieren muss, die wie SO1000E100, SO1000E101,... sein kann und eine gute Leistung hat. Dann, was ist die beste Lösung!

10voto

Pavel Stehule Punkte 37789

Verwenden Sie Sequenzen und Standardwert für 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)

7voto

Houari Punkte 5198

Sie können den Standardwert Ihrer Spalte als Konkatenation von S und einer normalen Sequenz wie folgt definieren:

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)

Wie man Sequenzen

Wie man die to_char Funktion verwendet.

1voto

Vivek S. Punkte 17624

Erstellen Sie eine Sequenz wie unten angegeben

 CREATE SEQUENCE seq_autoid
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 10000

Erstellen Sie eine Funktion zur Generierung einer alphanumerischen ID

create or replace function auto_id () returns varchar as $$
select 'SO'||nextval('seq_autoid')
$$ language sql 

und probieren Sie diese Beispieltabelle aus

create table AAA(id text ,namez text)

insert into AAA values (auto_id(),'MeinName')
insert into AAA values (auto_id(),'MeinName1')
insert into AAA values (auto_id(),'MeinName2')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X