art*_*hur 1 postgresql scripting window-functions update
我有许多表,都包含属性aid,bid,cid和xid整数类型,其他属性可能不同。对于每个(给定)表T,我想根据aid,bid,cid升序和更新列对行进行排序xid,增量值从 0 开始。实现这一目标的最佳方法是什么?
我目前的解决方案包括:
TxidT_tempTT_temp到T由于这些表具有不同的模式,我编写了一半代码PL/pgSQL,一半代码使用 bash 脚本编写。
问题 1:任何评论如何让它在纯 PL/pgSQL 中编程?
问题 2:任何评论如何更优雅地实现?
如果我理解正确,您想为每个表重新开始编号为 0。
使用窗函数row_number()在UPDATE:
UPDATE tbl t
SET xid = n.xid
FROM (SELECT ctid, row_number() OVER (ORDER BY aid, bid, cid) - 1 AS xid FROM tbl) n
WHERE t.ctid = n.ctid;
Run Code Online (Sandbox Code Playgroud)
用ctid作主键的可怜人的代理,因为您忽略了公开您的表定义。