Postgresql 是否可以使用递增标识符创建默认子句?

Postgresql 是否可以使用递增标识符创建默认子句?,postgresql,Postgresql,我想知道是否有可能在PostgreSQL中实现以下功能: 我有一个名为Dossier(英文意思是“文件夹”)的表,表结构如下:name,taille 现在,我希望在我的表上有一个条件,即每次创建档案的新实例时,名称列中的值都会自动添加一个自增标识符,如下所示:ref00001,ref00002等。(为了澄清,在第二次插入后,name列的值应自动为ref00002) 如果您想要零填充数字,请使用以下命令: CREATE SEQUENCE seq_ref; CREATE TABLE dossier

我想知道是否有可能在PostgreSQL中实现以下功能:

我有一个名为
Dossier
(英文意思是“文件夹”)的表,表结构如下:
name,taille

现在,我希望在我的表上有一个条件,即每次创建
档案
的新实例时,
名称
列中的值都会自动添加一个自增标识符,如下所示:
ref00001
ref00002
等。(为了澄清,在第二次插入后,
name
列的值应自动为
ref00002

如果您想要零填充数字,请使用以下命令:

CREATE SEQUENCE seq_ref;

CREATE TABLE dossier
        (
        ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || LPAD(NEXTVAL('seq_ref')::TEXT, 10, '0'),
        value TEXT
        );

虽然这是可能的,但在数据模型术语中,这通常也是一个非常糟糕的主意。如果可能,单独存储文件夹编号并将其格式化以供输出,例如从档案中选择ref | | | to _char(folderno,'00000')。请注意,如果使用
序列
,则它可能有孔(间隙),因此您可能会得到
ref00001
ref00002
ref00004
,等等。正如您所说,这是真的。在某些情况下,将不尊重指控。为什么在ref00001之后的某个时间转到ref00008!!!!
CREATE SEQUENCE seq_ref;

CREATE TABLE dossier
        (
        ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || LPAD(NEXTVAL('seq_ref')::TEXT, 10, '0'),
        value TEXT
        );