在PostgreSQL数据库中生成DECIMAL序列号

时间:2018-04-04 09:49:32

标签: postgresql concurrency postgresql-9.6

我希望能够生成一个非常大的序列号,直到20个字节。

内置序列类型允许的最大长度为8个字节(bigserial)。

所以符合我目标的类型是DECIMAL。

CREATE TABLE public.ca_params
(
  serial DECIMAL
);

CREATE OR REPLACE FUNCTION generate_serial()
RETURNS NUMERIC AS $$
DECLARE serial_ NUMERIC;
BEGIN
    select serial+1 into serial_ from ca_params
    for update;
    update ca_params set serial=serial_;
    RETURN serial_;
END; $$ LANGUAGE plpgsql

我的问题是我是否有多个进程正在运行

select generate_serial()

select子句总是会返回一个唯一的更新值吗?

0 个答案:

没有答案