postgresql - Postgres 中 LIMIT 如何通过主键与 DELETE 交互? (修复损坏的唯一索引)

标签 postgresql indexing corruption unique-index

我收到了一个陷入奇怪状态的数据库。在过去的某个不确定的时间,我最终遇到了同一个表中具有相同主键的重复行的情况:

=> \d my_table
Table "public.my_table"
       Column       |          Type           | Modifiers 
--------------------+-------------------------+-----------
 id                 | bigint                  | not null
 some_data          | bigint                  | 
 a_string           | character varying(1024) | not null
Indexes:
"my_table_pkey" PRIMARY KEY, btree (id)

=> SELECT id, count(*) FROM my_table GROUP BY id HAVING count(*) > 1 ORDER BY id;
#50-some results, non-consecutive rows.

我不知道数据库是如何进入这种状态的,但我希望能够安全地摆脱它。如果对于每个重复的主键,如果我执行以下形式的查询:

DELETE FROM my_table WHERE id = "a_duplicated_row" LIMIT 1;

它只会从表中删除一行行,还是会删除具有给定主键的两行?

最佳答案

可惜,PostgreSQL 尚未实现 DELETE 或 UPDATE 的 LIMIT。如果行在其他方面都无法区分,则需要小心使用隐藏的 ctid 列来打破联系,如讨论的 here 所示。 。或者只是通过从现有表中选择不同的元组并重命名来创建表。

关于postgresql - Postgres 中 LIMIT 如何通过主键与 DELETE 交互? (修复损坏的唯一索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844471/

相关文章:

python - Django:在文本文件中从 Model.save() 编写 SQL 代码

sql - 如何计算 PostgreSQL 中列中的重复值?

java - 检测损坏的 OGG 文件

linux - 当 Linux 操作系统非正常关闭/重置时,如何防止文件/磁盘损坏?

memory - Windows Mobile 内存损坏

sql - 使用 NEW 为触发器创建函数时出错

django - 如何在 docker-compose 中访问 Postgres 数据库

sql - 在 "UNION ALL" View 上查询缓慢

Java:JTable 内的 JComboBox - setSelectedIndex 对 GUI 没有影响

Magento 正确地重新索引所有内容