今天我开始将MySql数据库移植到PostgreSQL,我的外键和他们的'共享'有问题
我不知道如何解释,所以这里是创建脚本的一些伪代码:
create table id_generator (
id serial PRIMARY KEY,
description varchar(50) );
create table parent (
id REFERENCES id_generator(id),
--content );
create table child (
id REFERENCES id_generator(id),
id_parent REFERENCES parent(id),
--content );
所以我使用一个表作为'id_generator'来创建id,并为其他表提供对值表的引用。在MySql中我没有遇到任何问题所以我希望它也可以在PostgreSQL中工作。
运行该脚本时,我收到错误消息,我需要primary key
/ unique
在表parent
上创建一个引用。所以我改成了:
create table id_generator (
id serial PRIMARY KEY,
description varchar(50) );
create table parent (
id REFERENCES id_generator(id) PRIMARY KEY,
--content );
create table child (
id REFERENCES id_generator(id),
id_parent REFERENCES parent(id),
--content );
因此服务器接受创建脚本,并为一些插入设置了所有内容。
我创建了第一个id:
insert into id_generator(description) values("parentID");
然后我想添加父母:
insert into parent(id, /*content*/) values(1, /*content*/);
也可按预期工作,因此我需要为child
插入parent
:
insert into id_generator(description) values("childID");
insert into child(id,id_parent)values(2,1);
在这里我收到错误消息“ERROR:重复键值违反唯一约束DETAIL:key(id_parent)=(1)allready exists”
编辑:
\d child;
Tabelle ╗public.child½
Spalte | Typ | Attribute
-------------------+---------+-----------
id | integer | not null
id_parent | integer |
Indexe:
"child_pkey" PRIMARY KEY, btree (id)Fremdschlⁿssel-Constraints:
"child_id_parent_fkey" FOREIGN KEY (id_parent) REFERENCES parent(id)
"child_id_generator_fkey" FOREIGN KEY (id) REFERENCES id_generator(id)
我该如何解决?
答案 0 :(得分:1)
好的,对不起,问题解决了,插入声明的双重调用:facepalm: