我需要在记录插入时创建一些客户编号,格式为“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?