2016-11-07 143 views
0

我有一个表描述如下:的Postgres数据库建设多外键

         Table "public.lead" 
      Column   |    Type    |    Modifiers     
-----------------------------+--------------------------------+----------------------------------------- 
id       | character varying(36)   | not null 
reference_code    | character varying(20)   | not null 
country_id     | character varying(36)   | not null 
language_id     | character varying(36)   | not null 
locale_id     | character varying(36)   | not null 
from_country_id    | character varying(36)   | not null 
to_country_id    | character varying(36)   | not null 
customer_id     | character varying(36)   | not null 
user_id      | character varying(36)   | 
from_date     | date       | not null 
from_date_type    | smallint      | not null default (0)::smallint 
from_street     | character varying(200)   | 
from_postalcode    | character varying(25)   | 
from_city     | character varying(100)   | 
from_country    | character varying(50)   | 
from_apartment_type   | character varying(255)   | not null default '0'::character varying 
from_floor     | smallint      | 
from_rooms     | numeric(3,1)     | 
from_people     | integer      | 
from_squaremeter   | integer      | 
from_elevator    | smallint      | not null 

我试图创建(COUNTRY_ID,from_country_id,to_country_id)外键 正如你可以看到所有这3个领域的有关系与桌子。 但是当我尝试创建这些外键时,出现以下错误。

ERROR: insert or update on table "lead" violates foreign key constraint "lead_to_country_id" Detail: Key (to_country_id)=(United Kingdom) is not present in table "country". Details

+0

错误是由'insert'或'update'语句引起的。请[编辑]你的问题和所有这些陈述。 –

回答

0

此错误通常与缺少的关键字有关。

当您尝试在插入语句后创建外键时,SQL将搜索具有主键(PK)的表中的那些键。

例如,

table_with_PK

col1(Pk) | col2| coln ... 
id_1  foo bar ... 
id_2  nan ana ... 

table_connected_to_table_with_PK

col1(Fk) | col2 | etc... 
id_1 
id_2 
id_3 (Error because not present in table_with_PK) 

所以首先创建具有主键的表,然后填充它。

第二次用外键创建表,创建外键(Fk),然后填充/更新它,以便在数据库中保持一致。在约束

检查PostgreSQL文档:https://www.postgresql.org/docs/current/static/ddl-constraints.html

0

错误消息非常说它:您正在尝试设置to_country_id列值'United Kingdom'不被引用country表中。将该值插入到country表中并重试。