Postgresql或Python:如何循环表记录并创建序列号?

wlp8pajw  于 2022-12-26  发布在  PostgreSQL
关注(0)|答案(1)|浏览(95)

我有一个关于在现有记录上创建序列号的任务。这个表已经创建,有大量的记录,我创建了一个新字段"唯一ID"。
让我们看看我的表如下:-

FieldA   FieldB  UniqueId
Zack     928334  
Yassir   829384  
Yassir   829384  
Zack     928334  
Zack     928334  
Richard  723346

我需要的是PostgreSQL或Python可以在第一条记录上创建一个以"0501"开头的数字,如果同一条记录找到了一个新数字,但序列将是"0502",依此类推。

FieldA   FieldB  UniqueId
Zack     928334  0501
Yassir   829384  0501
Yassir   829384  0502
Zack     928334  0502
Zack     928334  0503
Richard  723346  0501

关于这件事我还没有任何想法,希望那些已经遇到这个问题的人能帮助我解决它。
我立即提前非常感谢你。
谢谢你。

lx0bsm1f

lx0bsm1f1#

你可以用一个相对简单的触发器得到你想要的。(参见demo

create or replace function gen_unique_id()
  returns trigger 
 language plpgsql
as $$
begin 
    select coalesce( max(uniqueid)+1, 501)  
      into new.uniqueid
      from test 
     where fielda = new.fielda
       and fieldb = new.fieldb; 
   
    return new;
end; 
$$;

create trigger unique_id_biur
        before insert or update
            on test
          for each row
           execute function gen_unique_id();

注意事项:

1.这是max+1的赋值。在多用户环境中,实际上保证在某个点生成一个副本。您需要处理它所启用的争用条件。
1.您需要弄清楚当fieldafieldb被更新为一组不存在的值或旧值中留有间隙时会发生什么,以及删除一行时会发生什么。
可能会有其他后果。

相关问题