我正在使用 Postgres 9.1 并想创建一个可以用作主键的序列,它应该如下所示:
| entity_id_seq |
-----------------
| X0001 |
| X0002 |
....
| X0123 |
并将nextval( 'entity_id_seq' )
返回'X0124'
。
任何想法如何以及是否可以使用纯 Postgres?
非常感谢!
我正在使用 Postgres 9.1 并想创建一个可以用作主键的序列,它应该如下所示:
| entity_id_seq |
-----------------
| X0001 |
| X0002 |
....
| X0123 |
并将nextval( 'entity_id_seq' )
返回'X0124'
。
任何想法如何以及是否可以使用纯 Postgres?
非常感谢!
这样的事情应该没问题:
创建序列:
CREATE SEQUENCE special_seq;
创建一个函数,或者不创建一个函数:
CREATE OR REPLACE FUNCTION
nextval_special()
RETURNS TEXT
LANGUAGE sql
AS
$$
SELECT 'X'||to_char(nextval('special_seq'), 'FM0000');
$$;
现在检查它是否有效:
SELECT nextval_special() FROM generate_series(1,10);
nextval_special
-----------------
X0001
X0002
X0003
X0004
X0005
X0006
X0007
X0008
X0009
X0010
(10 rows)
现在您可以使用上述函数创建表:
CREATE TABLE test (
id TEXT PRIMARY KEY DEFAULT nextval_special(),
a int
);
或者只是通过函数的简单查询没有函数:
CREATE TABLE test (
id TEXT PRIMARY KEY DEFAULT 'X'||to_char(nextval('special_seq'), 'FM0000'),
a int
);
我们可以创建一个函数来使用 nextval 并在其前面加上 X。像这样的东西:
CREATE FUNCTION nextseq() RETURNS text
AS
begin
return 'X'||lpad(nextval( 'entity_id_seq',4,'0' );
end;