首頁 > 資料庫 > mysql教程 > 如何在沒有主鍵的情況下刪除 PostgreSQL 中特定數量的已排序行?

如何在沒有主鍵的情況下刪除 PostgreSQL 中特定數量的已排序行?

Linda Hamilton
發布: 2024-12-31 05:27:10
原創
1023 人瀏覽過

How to Delete a Specific Number of Sorted Rows in PostgreSQL Without a Primary Key?

在 PostgreSQL 中透過排序刪除固定數量的行

由於 DELETE 語法的限制,在 PostgreSQL 中透過排序刪除行可能是一個挑戰。由於缺少主鍵,這個問題變得更加複雜,使得子查詢解決方案變得不切實際。

為了解決這個挑戰,您可以利用 ctid 字段,它是表中每一行的唯一識別碼。透過利用 ctid,您可以根據排序條件建構一個針對特定行進行刪除的查詢:

DELETE FROM ONLY logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
登入後複製

ctid 欄位為每個行版本提供唯一識別碼。但是,需要注意的是,如果行被 VACUUM FULL 更新或移動,它可能會改變。此外,如果日誌表具有繼承表,則 DELETE FROM ONLY 子句可防止從後代表中意外刪除行。

如果日誌表已分割區,則有必要在查詢中包含tableoid 以確保刪除僅發生在預期的分割區:

DELETE FROM logtable
WHERE (tableoid,ctid) IN (
    SELECT tableoid,ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
登入後複製

使用這些技術,您可以根據排序標準有效地刪除固定數量的行,同時保留精確刪除,確保刪除指定數量的行,無論重複的時間戳記為何。

以上是如何在沒有主鍵的情況下刪除 PostgreSQL 中特定數量的已排序行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板