如何在PostgreSQL中通过排序删除固定数量的行?

前端之家收集整理的这篇文章主要介绍了如何在PostgreSQL中通过排序删除固定数量的行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图把一些旧的MySQL查询到Postgresql,但我有麻烦这一个:
DELETE FROM logtable ORDER BY timestamp LIMIT 10;

Postgresql不允许在其删除语法中的排序或限制,并且表没有主键,因此我不能使用子查询。此外,我想保留查询完全删除给定数字或记录的行为 – 例如,如果表包含30行,但它们都有相同的时间戳,我仍然要删除10,虽然它不重要其中10。

所以;如何在Postgresql中通过排序删除固定数量的行?

编辑:没有主键意味着没有log_id列或类似。啊,传统系统的快乐!

你可以尝试使用 ctid
DELETE FROM logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
)

ctid是:

The physical location of the row version within its table. Note that although the ctid can be used to locate the row version very quickly,a row’s ctid will change if it is updated or moved by VACUUM FULL. Therefore ctid is useless as a long-term row identifier.

还有oid,但只有存在,如果你特别要求,当你创建表。

原文链接:https://www.f2er.com/postgresql/193690.html

猜你在找的Postgre SQL相关文章