我需要在插入记录上创建一些客户编号,格式为'A'+ 4位数字(基于ID)。因此,记录ID 23-> A0023,依此类推。我目前的解决方案是这样:
-- Table
create table t (
id bigserial unique primary key,
x text,
y text
);
-- Insert
insert into t (x, y) select concat('A',lpad((currval(pg_get_serial_sequence('t','id')) + 1)::text, 4, '0')), 'test';
这很好用。现在我的问题是……从确保currval(seq)+1与id列相同的意义上来说,这是“安全”的吗?我认为应该在语句执行期间将其锁定。这是正确的方法还是直接访问要创建的ID的快捷方式?
答案 0 :(得分:1)
除了存储这些数据,您还可以在每次需要时查询它,从而使整个过程不易出错:
SELECT id, 'A' + LPAD(id::varchar, 4, '0')
FROM t