我有许多表,所有表都包含属性aid,bid,cid
,并且xid
类型为整数,其他属性可能不同。对于每个(给定的)表T
,我想根据aid,bid,cid
升序对行进行排序,并使用从 0 开始的增量值更新列xid
。实现这一目标的最佳方法是什么?
我目前的解决方案包括:
- 选择表
T
- 在表的有序元组上打开游标
- 将自动增量值分配给
xid
- 将元组插入时态表
T_temp
- 从中删除所有记录
T
- 将所有记录插入
T_temp
到T
由于这些表具有不同的架构,我将一半的代码编写在PL/pgSQL
其中,另一半的代码使用 bash 脚本编写。
问题 1:关于如何让它在纯 PL/pgSQL 中编程的任何评论?
问题 2:有什么意见可以更优雅地实现吗?
如果我理解正确,你想为每个表重新编号 0。在以下情况
下使用窗口函数
row_number()
UPDATE
:用
ctid
作主键的穷人代理人,因为您忽略了公开您的表定义。SQL小提琴。
db<>在这里摆弄