首页 > 数据库 > mysql教程 > 如何在没有主键的情况下删除 PostgreSQL 中特定数量的已排序行?

如何在没有主键的情况下删除 PostgreSQL 中特定数量的已排序行?

Linda Hamilton
发布: 2024-12-31 05:27:10
原创
1022 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板