postgresql Postgres -从父表中删除记录,但不删除外键子表记录

3xiyfsfu  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(147)

我有一个奇怪的用例。我正在使用的一个数据库有一个主键列在一个记录中重复了--我试图删除重复的列,但由于外键关系而无法删除。
父数据表:
| 标识符|标题|
| - -|- -|
| 一个|有些|
| 一个|其他|
| 2个|另一个|
子数据表:child.parent_id = parent.id
| 标识符|标题|父标识|
| - -|- -|- -|
| 一个|有些|一个|
| 2个|其他|2个|
| 三个|另一个|2个|
我需要从父表(id=1)中删除重复的记录,但由于外键约束而无法删除。此处的最佳路径是什么?

roejwanj

roejwanj1#

不确定您是如何创建引用非唯一键列的外键的。
只需删除外键,删除有问题的行,然后重新添加外键。当然,您应该只在数据库未使用时才执行此操作。并且可能在事务中执行此操作。
可以使用以下命令删除外键:

ALTER TABLE child DROP CONSTRAINT the_foreign_key_name;

并添加以下内容:

ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent (id);

相关问题