【问题标题】:Problems removing unique constraint postgresql删除唯一约束 postgresql 的问题
【发布时间】:2014-04-04 08:38:47
【问题描述】:

我在表格上设置主键时犯了一个错误,比如在字段“x”上。另一个字段,比如字段“y”,我放置了一个唯一约束,并在该字段中添加了一些其他表作为外键引用。

我注意到我的错误并将主键放在字段“x”上并将其放在“y”上。在这一点上,我意识到我可以删除对“y”的唯一约束。但是现在我这样做会出错,告诉我:不能在表 'foo' 上删除约束 'y'_unique_constraint,因为其他对象依赖于它。

我尝试通过执行事务和“设置所有延迟的约束”,但这没有帮助。

如何在不从头开始构建数据库的情况下移除此约束?据我所知,现在主键在同一字段上,因此对 'y' 的唯一约束是多余的。

【问题讨论】:

  • 看来仍然有来自其他表的外键引用唯一的“x”列。外键要求所引用的列(集)是唯一的。
  • 不,事实并非如此,似乎外键引用了唯一约束索引而不是它自身的字段:...取决于索引'y'_unique_constraint。所以我需要以某种方式“告诉”外键来引用新创建的主键。
  • 你不能告诉外键约束。只需删除旧的并创建新的。
  • 我希望有更快的方法,但是是的,我认为这就是解决方案。
  • 你试过用CASCADE删除它吗? postgresql.org/docs/9.3/static/sql-altertable.html(约束的依赖对象是它的索引)

标签: postgresql foreign-keys unique-constraint


【解决方案1】:

一开始我没有意识到外键引用的是索引而不是字段。所以在同一个字段上创建一个新的主键并不意味着外键切换到新的索引。

我现在使用级联删除了唯一约束并重新添加了所有外键,它们现在使用主键。

【讨论】:

  • 外键引用,而不是索引。但是要引用一个列,该列必须是唯一的。通过唯一约束或主键约束 - 两者都由唯一索引强制执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2012-07-26
相关资源
最近更新 更多