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

4
我是一名新手,正在学习postgresql。我已经向我的表中插入了5000行数据,但我只想从这5000行中删除其中的1500行。在这里,我没有任何限制来删除这些行。我需要从表格的顶部或底部删除这1500行。
我已经搜索了很多资料,但没有找到如何在没有约束条件的情况下删除这些行的线索。
请提供任何建议。

Postgres数据库中没有内部顺序。您应该根据某些列顺序删除1500条记录。 - Tim Biegeleisen
在关系型数据库中,不存在所谓的“底部1500行”。 - user330315
1个回答

5
DELETE FROM YourTable
WHERE ctid IN (
SELECT ctid
FROM YourTable
ORDER BY timestamp
LIMIT 1500
)

ctid是:

行版本在其表中的物理位置。请注意,尽管可以使用ctid快速定位行版本,但如果通过VACUUM FULL更新或移动行,则行的ctid将发生更改。因此,ctid作为长期行标识符是无用的。应使用OID或甚至更好的用户定义的序列号来标识逻辑行。


2
请注意,ctid IN (SELECT ctid FROM ... LIMIT n) 的速度非常慢。以下方法运行得快多了:ctid = ANY(ARRAY(SELECT ctid FROM ... LIMIT n)) - Ezequiel Tolnay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接