Postgresql
為多個表連續編號行
我有許多表,都包含 attributes
aid,bid,cid
,並且xid
是整數類型,其他屬性可能會有所不同。對於每個(給定的)表T
,我想根據aid,bid,cid
升序對行進行排序,並更新xid
從 0 開始的遞增值的列。實現這一目標的最佳方法是什麼?我目前的解決方案包括:
- 選擇表
T
- 在表的有序元組上打開游標
- 將自動增量值分配給
xid
- 將元組插入時態表
T_temp
- 刪除所有記錄
T
- 將所有記錄插入
T_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;
用
ctid
作主鍵的窮人代理,因為您忽略了公開您的表定義。db<>在這裡擺弄