我有一个表“xxx”,其中有一列“req”。在“req”这一列上,我希望它始终采用以下方式自动生成的值..“req”列的值是Ref_0001,然后再插入Ref_0002,Ref_0003 .... ...我尝试第一个@Craig Ringer 的解决方案
CREATE SEQUENCE seq_ref;
CREATE TABLE dossier
(
ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || NEXTVAL('seq_ref'),
value TEXT
);
如果您想要零填充数字,请使用以下命令:
CREATE SEQUENCE seq_ref;
CREATE TABLE dossier
(
ref TEXT NOT NULL PRIMARY KEY DEFAULT 'ref' || LPAD(NEXTVAL('seq_ref')::TEXT, 10, '0'),
value TEXT
);
这个解决方案在我的应用程序插入新行时不能正常工作..但是当我尝试插入时,在我刷新表之前列是空的..所以我尝试使用触发器。
我终于在 PostgreSQL 中创建了一个触发器来解决我的问题。为这种形式的列 req 生成值 Ref00001, Ref0002 ...但它不会改变;这没用; 仍然是空列:
CREATE table test(
id serial primary key,
non varchar(12),
req varchar(12)
);
CREATE OR REPLACE FUNCTION Start_generate() RETURNS trigger AS $emp_stamp$
BEGIN
NEW.req := ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text));
return null;
END;
$emp_stamp$ LANGUAGE plpgsql;
CREATE TRIGGER Generate_ref AFTER INSERT ON test
FOR EACH ROW EXECUTE PROCEDURE Start_generate();
我不知道为什么它不起作用......我将默认添加到
NEW.req := DEFAULT ('ref'::text || lpad((nextval('seq_refcomposant'::regclass))::text, 6, '0'::text));
并且默认有错误!
怎样才能达到我想要的效果?