Postgresql 没有唯一的约束匹配引用表的给定键

Postgresql 没有唯一的约束匹配引用表的给定键,postgresql,Postgresql,我在创建一个包含外键的表时遇到问题,该外键来自另一个具有两个主键的表 下表如下: create table names_types( id_name serial,name varchar(70),type varchar(70),primary key(id_name,name) ); create table risk_final( id_risk serial,id_date varchar(70)references date_final(vdate_id) ,name varchar

我在创建一个包含外键的表时遇到问题,该外键来自另一个具有两个主键的表

下表如下:

create table names_types(
id_name serial,name varchar(70),type varchar(70),primary key(id_name,name)
);

create table risk_final(
id_risk serial,id_date varchar(70)references date_final(vdate_id)
,name varchar(70)references names_types(name)
,var_mc_risk varchar(70)
,mvar_mc_risk varchar(70)
,incvar_mc_risk varchar(70)
,cvar_mc_risk varchar(70)
,delta varchar(70)
,present_value varchar(70)
,net_exposure varchar(70)
,amount varchar(70)
,primary key(id_risk,id_date,name)
);
无法创建表risk_final,并给出错误信息:

错误:没有唯一约束匹配引用表“名称\类型”的给定键


我该如何解决它呢?

我认为信息非常清楚:您不能引用键的部分,无论是主键还是候选键(因此称为“唯一约束”)。如果您需要引用names_types表,您可以在后一个表上创建一个代理键并引用该键(例如整数id),但如果您实际上只想引用name列,则应该有第三个表,例如,
names
,主键为
name

create table names (name varchar(70), primary key (name));
create table types (id_name serial, primary key (id_name));
create table names_types (id_name serial references types(id_name), 
                          name varchar(70) references names(name), 
                          primary key(id_name, name));

我不明白你的意思,我只需要引用name列,但是name列本身不能是主键,我需要一个id。我该怎么办?
创建表名(name varchar(70),主键(name)
,然后引用此表:
创建表风险\u final(…,name varchar(70)引用名称(name),…
我明白你的意思,名称(name varchar(70)primary key,type varchar(70)),但在这种情况下,名称对于类型是唯一的,在某些情况下,我需要有多个同名公司,这就是为什么我需要一个id作为名为“primary key(id,name)”的主键。请帮助创建表名称(name varchar(70),primary key(name))创建表类型(id_名称序列,主键(id_名称));创建表名称(id_名称序列引用类型(id_名称),名称varchar(70)引用名称(名称),主键(id_名称,名称));只要它适合您的模型……我更新了答案以确保完整性。可能的副本