加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:50:37 所属栏目:百科 来源:网络整理
导读:我试图把一些旧的MySQL查询到PostgreSQL,但我有麻烦这一个: DELETE FROM logtable ORDER BY timestamp LIMIT 10; 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,但只有存在,如果你特别要求,当你创建表。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读