创建一个值为字符和数字混合的序列

Bea*_*eld 3 postgresql

我正在使用Postgres 9.1,并希望创建一个我可以用作主键的序列,它应该如下所示:

| entity_id_seq |
-----------------
|         X0001 |
|         X0002 |
           ....
|         X0123 |
Run Code Online (Sandbox Code Playgroud)

nextval( 'entity_id_seq' )会回来'X0124'.

任何想法是如何以及如果这可以用纯Postgres?

非常感谢!

Szy*_*ski 7

这样的事应该没问题:

创建序列:

CREATE SEQUENCE special_seq;
Run Code Online (Sandbox Code Playgroud)

是否创建一个函数:

CREATE OR REPLACE FUNCTION
nextval_special()
RETURNS TEXT
LANGUAGE sql
AS
$$
    SELECT 'X'||to_char(nextval('special_seq'), 'FM0000'); 
$$;
Run Code Online (Sandbox Code Playgroud)

现在检查它是否有效:

SELECT nextval_special() FROM generate_series(1,10);

 nextval_special 
-----------------
 X0001
 X0002
 X0003
 X0004
 X0005
 X0006
 X0007
 X0008
 X0009
 X0010
(10 rows)
Run Code Online (Sandbox Code Playgroud)

现在您可以使用上面的函数创建表:

CREATE TABLE test (
    id TEXT PRIMARY KEY DEFAULT nextval_special(),
    a int
);
Run Code Online (Sandbox Code Playgroud)

或者只是没有来自函数的简单查询的函数:

CREATE TABLE test (
    id TEXT PRIMARY KEY DEFAULT 'X'||to_char(nextval('special_seq'), 'FM0000'),
    a int
);
Run Code Online (Sandbox Code Playgroud)