删除第一个 X 行 Ingres ANSI

delete first X row Ingres ANSI

我有 730000 多条记录需要在与 ANSI92 一起使用的 Ingres 数据库中删除,然后我需要删除但不要过载数据库,简单删除搜索条件不起作用的地方,数据库只使用所有内存和拖曳错误。考虑循环 运行 它,并按部分删除 10-20K 的记录。

我尝试使用 top 但它不起作用

 delete top (10)from TABLE where web_id <0 ;

,也曾尝试使用 Limit 也没有用

DELETE FROM from TABLE where web_id <0  LIMIT 10;

有什么办法吗?谢谢!

您可以使用临时会话 table 来保存前 10 个 tids(元组 ID),然后根据这些删除:

declare global temporary table session.tenrows as
select first 10 tid the_tid from "table" where web_id<0
on commit preserve rows with norecovery;

delete from "table" where tid in (select the_tid from session.tenrows);

当您说 "without overload db" 时,您的意思是避免达到事务日志文件的强制中止限制吗?如果是这样,可能对您有用的是:

set session with on_logfull=notify;
delete from table where web_id<0;

这会在达到强制中止的点自动提交您的事务然后继续,而不是回滚并报告错误。 使用此设置的一个缺点是,如果发生任何其他错误(您的工作可能会部分提交),取消选择 has/hasn 未完成的内容可能会很棘手,但由于这似乎是直接删除a table 应该很明显哪些行保留哪些行不保留。 "set session" 语句在事务开始时必须是 运行。 我建议不要 运行ning 与 "on_logfull=notify" 的并发会话(这方面存在错误,它们是否已在您的安装中修复取决于您的 version/patch 级别)。