【问题标题】:Delete duplicate entries in Postgresql删除 Postgresql 中的重复条目
【发布时间】:2021-12-16 01:07:27
【问题描述】:

我的用户表有多个相同的用户条目,我需要删除重复的 条目。如何跳过外键相关条目并删除剩余条目。例如下面我在表中的条目。我需要删除与外键无关的重复条目。有人可以指导如何在 Postgresql 中进行此操作吗?

  id     name              email              role_id
 2512 |Raja (Contractor) | raja_test@test.com|5    |
 6    |Raja (Contractor) | raja_test@test.com|5    |
 5    |Raja (Contractor) | raja_test@test.com|5     |

我试过下面的查询

delete from users a using users b where a.email=b.email ;
ERROR:  update or delete on table "users" violates foreign key constraint "fk_rails_c5e2af0763" on table "devices"
DETAIL:  Key (id)=(14) is still referenced from table "devices".

设备表

id | mac_address | model | user_id 

14 | 14:5E:BE:26 |Arris |  6

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 请标记您的列,然后告诉我们最终输出应该是什么样子。
  • 第一列的值是否唯一?
  • 我已经更新了我尝试过的内容。
  • 您需要向我们展示devices 表的样子,因为设备中有一个外键指向users

标签: postgresql duplicates sql-delete


【解决方案1】:

你可以使用:

ALTER TABLE users disable TRIGGER ALL;

-- your delete query  

ALTER TABLE users enable TRIGGER ALL;

当我们在 PostgreSQL 中使用disable trigger all 时,隐藏触发器、外键控件和所选表的其他约束也会被禁用

【讨论】:

  • 我已经在开发环境中尝试过并使用了相同的删除查询。它已经删除了所有数据。
  • 是的,因为您的查询将删除 row.email 等于自身的任何内容,因此所有行。
猜你喜欢
  • 2016-08-30
  • 2014-08-01
  • 2013-03-09
  • 1970-01-01
  • 2021-01-22
  • 2012-04-10
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多