Postgresql

為多個表連續編號行

  • May 21, 2019

我有許多表,都包含 attributes aid,bid,cid,並且xid是整數類型,其他屬性可能會有所不同。對於每個(給定的)表T,我想根據aid,bid,cid升序對行進行排序,並更新xid從 0 開始的遞增值的列。實現這一目標的最佳方法是什麼?

我目前的解決方案包括:

  • 選擇表T
  • 在表的有序元組上打開游標
  • 將自動增量值分配給xid
  • 將元組插入時態表T_temp
  • 刪除所有記錄T
  • 將所有記錄插入T_tempT

由於表有不同的模式,我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作主鍵的窮人代理,因為您忽略了公開您的表定義。

SQL小提琴。

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/54960