首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:对于被引用的表"bar“,没有与给定键匹配的唯一约束。

错误:对于被引用的表"bar“,没有与给定键匹配的唯一约束。
EN

Stack Overflow用户
提问于 2012-08-15 16:48:30
回答 4查看 237.9K关注 0票数 201

尝试在Postgres 9.1中创建此示例表结构:

代码语言:javascript
运行
复制
CREATE TABLE foo (
    name        VARCHAR(256) PRIMARY KEY
);

CREATE TABLE bar (
    pkey        SERIAL PRIMARY KEY,
    foo_fk      VARCHAR(256) NOT NULL REFERENCES foo(name), 
    name        VARCHAR(256) NOT NULL, 
    UNIQUE (foo_fk,name)
);

CREATE TABLE baz(   
    pkey        SERIAL PRIMARY KEY,
    bar_fk      VARCHAR(256) NOT NULL REFERENCES bar(name),
    name        VARCHAR(256)
);

运行上面的代码会产生一个错误,这对我来说没有任何意义:

注意: create TABLE / PRIMARY KEY将为表"foo“创建隐式索引"foo_pkey”注意: create TABLE将为串行列"bar.pkey“创建隐式序列"bar_pkey_seq”注意: CREATE table / PRIMARY KEY将为表"bar“创建隐式索引"bar_pkey”注意: CREATE TABLE / UNIQUE将为表"bar“创建隐式索引"bar_foo_fk_name_key”注意: create TABLE将为串行列"baz“创建隐式序列"baz_pkey_seq”。pkey“注意: CREATE TABLE / PRIMARY KEY将为表"baz”创建隐式索引"baz_pkey“错误:没有与被引用表"bar”的给定键匹配的唯一约束

代码语言:javascript
运行
复制
********** Error **********

ERROR: there is no unique constraint matching given keys for referenced table "bar"
SQL state: 42830

有人能解释一下为什么会出现这个错误吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-15 17:00:23

这是因为bar表上的name列没有唯一约束。

因此,假设您在bar表上有2行包含名称'ams',并且您在baz上插入一行,在bar_fk上插入'ams',由于有两行匹配,那么它会引用bar上的哪一行?

票数 261
EN

Stack Overflow用户

发布于 2012-08-15 16:54:32

在postgresql中,所有外键都必须引用父表中的唯一键,因此在bar表中必须有一个unique (name)索引。

另请参阅http://www.postgresql.org/docs/9.1/static/ddl-constraints.html#DDL-CONSTRAINTS-FK,具体地说:

最后,我们应该提到外键必须引用作为主键或形成唯一约束的列。

重点是我的。

票数 98
EN

Stack Overflow用户

发布于 2018-01-17 14:43:42

您应该将name列作为唯一约束。这里有3行代码来改变你的问题

  1. 首先通过键入以下代码找出主键约束

\d table_name

在约束的底部显示如下所示:"some_constraint" PRIMARY KEY, btree (column)

  • Drop constraint:

ALTER TABLE table_name DROP CONSTRAINT使用现有的主键列创建新的主键列:

ALTER TABLE table_name添加约束some_constraint主键(COLUMN_NAME1、ALTER

就这样。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11966420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档