1

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

4

1 回答 1

1

您可以在每次需要时查询它,而不是存储这些数据,从而使整个事情更不容易出错:

SELECT id, 'A' + LPAD(id::varchar, 4, '0')
FROM   t
于 2018-11-14T19:05:17.153 回答