首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PostgreSQL中使用排序功能删除固定数量的行?

如何在PostgreSQL中使用排序功能删除固定数量的行?
EN

Stack Overflow用户
提问于 2011-03-03 00:38:36
回答 5查看 117K关注 0票数 134

我正在尝试将一些旧的MySQL查询移植到PostgreSQL,但我在使用这个查询时遇到了问题:

代码语言:javascript
复制
DELETE FROM logtable ORDER BY timestamp LIMIT 10;

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

那么,如何在PostgreSQL中使用排序功能删除固定数量的行呢?

编辑:没有主键表示没有log_id列或类似的列。啊,遗留系统的乐趣!

EN

回答 5

Stack Overflow用户

发布于 2011-03-03 01:16:54

Postgres文档建议使用数组而不是IN和subquery。这应该会快得多。

代码语言:javascript
复制
DELETE FROM logtable 
WHERE id = any (array(SELECT id FROM logtable ORDER BY timestamp LIMIT 10));

这个技巧和其他一些技巧可以在here中找到

票数 62
EN

Stack Overflow用户

发布于 2011-03-03 01:06:56

代码语言:javascript
复制
delete from logtable where log_id in (
    select log_id from logtable order by timestamp limit 10);
票数 16
EN

Stack Overflow用户

发布于 2013-12-18 20:18:09

假设您想要删除任何10条记录(没有排序),您可以这样做:

代码语言:javascript
复制
DELETE FROM logtable as t1 WHERE t1.ctid < (select t2.ctid from logtable as t2  where (Select count(*) from logtable t3  where t3.ctid < t2.ctid ) = 10 LIMIT 1);

在我的用例中,删除10M条记录会更快。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5170546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档