【问题标题】:How to drop a unique constraint on a column in Postgres?如何在 Postgres 的列上删除唯一约束?
【发布时间】:2018-07-25 13:22:30
【问题描述】:

这是我的数据库表

CREATE TABLE cart (
  id           UUID      NOT NULL PRIMARY KEY,
  shop_user_id UUID UNIQUE
);

当我尝试删除 shop_user_id 上的 UNIQUE 约束时,我得到了 sql 42601 error

这是我用来删除唯一约束的查询

ALTER TABLE cart DROP UNIQUE shop_user_id;

【问题讨论】:

  • 当你遇到语法错误时,通常是RTM的好时机

标签: postgresql constraints ddl


【解决方案1】:

要查找唯一约束的名称,请运行

SELECT conname
FROM pg_constraint
WHERE conrelid = 'cart'::regclass
  AND contype = 'u';

然后按如下方式删除约束:

ALTER TABLE cart DROP CONSTRAINT cart_shop_user_id_key;

cart_shop_user_id_key 替换为您从第一个查询中获得的任何内容。

【讨论】:

  • 试过了。但不能。因为 shop_user_id 是列名而不是约束名
  • 从 information_schema.table_constraints 中选择 *;找到约束。确保将其从表中删除,然后删除唯一值。
  • 我运行 select * from information_schema.table_constraints;这仍然在其中显示约束名称。但问题是如何丢弃呢?
  • @GhostCat 只有版主才能删除 cmets,因此清理 cmets 的最佳方法是标记它们。
  • 您可以随时删除自己的 cmets。当两个人交谈时,你真的认为你需要一个主持人来解决这个问题吗?说真的:这些人每天都会收到大量请求。不要把时间浪费在每个人只要把自己的事情整理好就可以解决的事情上。
【解决方案2】:

例如:

    CREATE TABLE teachers( teacher_id SERIAL PRIMARY KEY,
email VARCHAR(250) UNIQUE NOT NULL);


select * from information_schema.table_constraints;

ALTER TABLE teachers DROP CONSTRAINT teachers_email_key;

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2013-09-24
    • 2017-02-23
    • 2011-07-26
    • 2015-03-06
    • 2012-04-18
    • 1970-01-01
    • 2012-09-02
    • 2021-08-03
    相关资源
    最近更新 更多