我有一个有4000万行且没有主键的表。在添加主键之前,我想检查表中是否有重复的条目。当我说重复条目时,我不仅意味着在特定列上重复。我的意思是整行重复。
在上一个问题中,我被告知可以执行EXISTS
查询以确定重复项。我该怎么做?
我正在运行PostgreSQL 8.1.22。(通过运行获得此信息select version()
)。
要了解是否 任何 完整存在重复(在所有列相同),这可能是最快的方法:
SELECT EXISTS (
SELECT 1
FROM tbl t
NATURAL JOIN tbl t1
WHERE t.ctid <> t1.ctid
)
NATURAL JOIN
这是一种非常方便的简写方式,因为(在此引用手册):
NATURAL
是USING
表示两个表中具有相同名称的所有列的列表的简写。
EXISTS
可能最快,因为一旦发现第一个重复项,Postgres就会停止搜索。由于您很可能没有索引覆盖整个行并且表很大,因此可以节省 大量 时间。
是知道 NULL
的 永远不会 认为等同于另一个NULL
。如果您拥有NULL
价值观并认为它们是相同的,那么您就必须做更多的事情。
ctid
是一个系统列,可以(用作)即席主键,但从长远来看,它不能替代实际的用户定义的主键。
过时的版本8.1似乎没有<>
为定义运算符ctid
。尝试投射到text
:
SELECT EXISTS (
SELECT 1
FROM tbl t
NATURAL JOIN tbl t1
WHERE t.ctid::text <> t1.ctid::text
)
问题内容: 我正在将备份脚本从Shell转换为Python。我的旧脚本的功能之一是通过执行以下操作来检查创建的tarfile的完整性:gzip -t。 在Python中这似乎有些棘手。 似乎唯一的方法是读取tarfile中每个压缩的TarInfo对象。 有没有一种方法可以检查tarfile的完整性,而无需将其提取到磁盘或保留在内存中(完整)? Freenode上#python上的好人建议我应该逐块
新的2.0版本有一个分页,限制一个请求的朋友数量,这不允许我一次检索所有朋友,尽管有一个参数调用“limit”,它只能通过循环“偏移量”直到最后来完成。问题是每个用户都有不同数量的朋友! 我已经四处寻找了几个小时,但仍然没有解决方案。
问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: MySQL检查表是否存在而不会引发异常 我的项目中有一个动态mysql查询生成器,可从不同的表创建选择查询。 我需要检查当前处理表是否存在。 假设我的表是table1,table2和table3。我的代码是这样的: 我该如何进行检查(请告诉我最简单的方法)。 问题答案: 更新的mysqli版本: 原始mysql版本: 从PHP
当我试图检查数独的行中是否有重复的元素时,结果什么也没有返回。不知道代码是否正确。如果在一行中找到重复的元素,则需要打印找到的重复项。使用方法帮助我找到解决方案。
问题内容: 我有一个字母数字字符串,我想检查其中是否有整数重复的模式。而且它们应该是连续的。 例 12341234q我们 应该告诉我重复 1234 。 1234qwe1234 应该 不 告诉我, 1234 ,因为它不是连续重复。 12121212 应该被视为重复 12 ,因为这是第一个重复的集合。但是,如果有一种算法可以找到 1212 作为 12 之前的重复集,那么我想它必须在 1212上 再次执
我目前正在创建一些自定义流,通过会话来回发送一些数据。我注意到在某些情况下(例如,如果一个响应者流有一个session.receive,但在发起者流结束时仍未得到响应),不会抛出异常,一切都很顺利,甚至没有警告日志。有没有办法强制检查发送/接收的完整性?