从 Postgresql 表中删除一定数量的行

M.S*_*idu 4 postgresql

我是 postgresql 新手,我已经在表中插入了 5000 行,但我只想从 5000 行中删除 1500 行。在这里,我没有任何删除这些行的约束。我必须从表中删除顶部或底部 1500 行。

我用谷歌搜索了很多,但没有任何线索可以不受任何限制地删除行。

任何建议都会很棒。

khe*_*ana 5

DELETE FROM YourTable
WHERE ctid IN (
SELECT ctid
FROM YourTable
ORDER BY timestamp
LIMIT 1500
)
Run Code Online (Sandbox Code Playgroud)

ctid 是:行版本在其表中的物理位置。请注意,虽然 ctid 可用于非常快速地定位行版本,但如果行被 VACUUM FULL 更新或移动,其 ctid 将会更改。因此 ctid 作为长期行标识符是没有用的。应使用 OID(或者更好的是用户定义的序列号)来标识逻辑行。

  • 请注意,“ctid IN (SELECT ctid FROM ... LIMIT n)”非常慢。以下代码运行速度更快: `ctid = ANY(ARRAY(SELECT ctid FROM ... LIMIT n))` (2认同)