3

Postgres 9.1を使用していて、主キーとして使用できるシーケンスを作成したいと思います。これは次のようになります。

| entity_id_seq |
-----------------
|         X0001 |
|         X0002 |
           ....
|         X0123 |

そしてnextval( 'entity_id_seq' )戻り'X0124'ます。

純粋なPostgresでこれが可能であるかどうか、どのように考えればよいでしょうか?

どうもありがとう!

4

2 に答える 2

7

このようなものは問題ないはずです:

シーケンスを作成します。

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
);
于 2012-05-24T11:46:17.203 に答える
2

nextvalを使用し、それにXを付加する関数を作成できます。このようなもの :

CREATE FUNCTION nextseq() RETURNS text
AS 
begin 
return 'X'||lpad(nextval( 'entity_id_seq',4,'0' );
end;
于 2012-05-24T11:40:33.663 に答える