PostgreSQL在插入期间获取新ID

时间:2018-11-14 18:59:02

标签: postgresql currval

我需要在插入记录上创建一些客户编号,格式为'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的快捷方式?

1 个答案:

答案 0 :(得分:1)

除了存储这些数据,您还可以在每次需要时查询它,从而使整个过程不易出错:

SELECT id, 'A' + LPAD(id::varchar, 4, '0')
FROM   t